2014-11-10 2 views
0

Я создаю приложение AIR, и мне хотелось бы знать, можно ли запускать функцию только один раз?Запуск функции AS3 только один раз

Если пользователь перезагрузит свое устройство и запустит приложение, функция не будет запускаться снова.

Спасибо за ваши ответы,

ответ

0

Поскольку вы используете Adobe AIR, у вас есть несколько вариантов.

  1. Запишите файл, содержащий ваши данные для сохранения.

    Использование AIR позволяет записать файл данных на компьютер пользователя. Это более постоянный, чем SharedObject, который по разным причинам не может работать или сохраняется надолго.
    Вы можете сериализовать целые классы для легкого извлечения сложных объектов.

    Вот пример класса, менеджеров файла сохранения (для предпочтений или сейв и т.д.):

    package 
    { 
    import flash.filesystem.File; 
    import flash.filesystem.FileMode; 
    import flash.filesystem.FileStream; 
    import flash.utils.ByteArray; 
    import flash.utils.Dictionary; 
    import flash.net.registerClassAlias; 
    
    public class SaveData 
    { 
    
        //a list of any vars you want to save. 
        public var firstRun:Boolean = true; 
        public var someVar:int = 1; 
        public var anotherVar:Dictionary; 
    
    
        //the file for the user save data 
        public static function getFile():File { 
         return File.applicationStorageDirectory.resolvePath("saveFile.data"); 
        } 
    
        public static function loadFile():SaveData { 
         registerClassAlias("flash.utils.Dictionary", Dictionary); //you need to register any non-native classes you want to save 
         registerClassAlias("saveData", SaveData); 
    
         var data:SaveData 
    
         //check for a default save file in the application directory (optional, but sometimes it's nice to bundle a default with your application before the user saves their own data 
         var f:File = new File("app:/saveFile.data"); 
    
         if(f.exists){ 
          data = loadFromFile(f); 
         }else { 
          trace("Default File Doesn't Exist"); 
         } 
    
         //check the user storage directory for a save file, and see if it's newer than the one in the application directory 
         var userFile:File = getFile(); 
         if (userFile.exists) { 
          if (f.exists && f.modificationDate.time < userFile.modificationDate.time) { 
           trace("Local File is newer, load it"); 
           data = loadFromFile(userFile); 
          }else { 
           trace("Default File is newer"); 
          } 
         }else { 
          trace("Save File DOESN'T EXIST YET"); 
         } 
    
         if (!data) { 
          //data didn't load, let's create a new save file 
          data = new SaveData(); 
          saveToFile(data); 
         } 
    
         saveData = data; //assing to main static accessible var 
         return data; 
        } 
    
        private static function loadFromFile(f:File):SaveData { 
         var d:SaveData; 
         try{ 
          var stream:FileStream = new FileStream(); 
          stream.open(f, FileMode.READ); 
          d = stream.readObject() as SaveData; 
          stream.close(); 
          trace("DATA LOADED: " + f.nativePath); 
    
          return d; 
         }catch (err:Error) { 
          trace("Error Loading Save Data: " + f.nativePath); 
         } 
    
         return null; 
        } 
    
    
        public static function saveToFile(saveData:SaveData):void { 
         var fileStream:FileStream = new FileStream(); 
         fileStream.open(getFile(), FileMode.WRITE); 
         fileStream.writeObject(saveData); 
         fileStream.close(); 
        } 
    
    } 
    } 
    

    Затем, чтобы использовать его:

    var saveData:SaveData = SaveData.loadFile(); 
    
    if(saveData.firstRun){ 
        //do you first run code 
    
        //now set first run to false 
        saveData.firstRun = false; 
        SaveData.saveFile(saveData); 
    } 
    
  2. использовать SharedObject. Существует еще один ответ покрытия, но так как ни одного примера не был дан, я дам один:

    var mySO:SharedObject = SharedObject.getLocal("yourAppNameHere"); 
    if(mySO.data.hasHadFirstRun){ 
        //the cookie exists 
    }else{ 
        //the cookie hasn't indicated there has been a first run yet, so do whatever you need to do  
        //some code 
        mySO.data.hasHadFirstRun = true; //now that you've done whatever on the first run, let's save the cookie 
        mySO.data.flush(); //save (though it will save automatically I believe when you close the application 
    } 
    
  3. использовать SQLite.

    AIR может создавать и читать базы данных SQLite, если вашему приложению необходимо хранить другие данные, которые имеют смысл жить в структуре таблицы, может возникнуть смысл добавить в таблицу для хранения пользовательских настроек и вещей как первый флаг запуска - если вы не будете использовать базу данных для чего-либо еще, это, безусловно, будет чрезмерно убито.

    Узнайте больше о SQLite в AIR здесь: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7d49.html

+0

Большое спасибо за примерами! – user3094896

Смежные вопросы