我想问一下,为想要用flash创建的教育移动应用程序保存一些数据的最佳方法是什么。是吗
我想保存像
这样的数据我不希望该应用向孩子询问保存文件的位置 此外,我想 - 每次孩子使用应用程序 - 新数据附加到旧数据 指向教程的链接非常有用。
答案 0 :(得分:2)
如果您不关心保存的信息是否是人类可读的(或者更喜欢这种方式),那么执行此操作的好方法是在保存文件或共享对象中使用序列化对象。
无论使用哪种存储机制,该过程都非常相似。这是一个例子。
首先,为您的共享对象创建一个全局变量(可能在应用程序的开头):
var sharedObj:SharedObject = SharedObject.getLocal("MySaveData");
//if data exists in the shared object, load it or do something with it
if(sharedObj.data.userName){
trace("Hello " + saveData.userName);
}
稍后,当您想要保存一些数据时:
sharedObj.data.userName = "fflinstone";
sharedObj.data.wrongAttempts = 5;
//etc for other properties you want to add
sharedObj.flush(); //write the data to file
请记住,您使用的任何非原始类都必须注册才能反序列化它们。
所以,如果你想保存一种需要import语句的对象(例如Rectangle
),你必须通过这样做来注册:
flash.net.registerClassAlias("flash.geom.Rectangle", Rectangle); //you only have to have this once in your whole application, usually at the start of your program
或者,您可以为保存数据(自定义类)创建模型。
要这样做,请创建一个新的类文件(在AnimateCC中,转到file -> new -> actionscript 3.0 class
- 将其命名为SaveData
)。使文件的内容如下所示:
package {
public class SaveData {
public var userName:String;
public var wrongAttempts:int;
public var correctAttempts:int;
public var timeToCompletion:Number;
}
}
添加您要存储为公共变量的任何属性,如图所示。
然后,注册该类以便它可以保存在共享对象中(您可以在应用程序的开头执行此操作)
flash.net.registerClassAlias("SaveData",SaveData);
然后创建一个全局保存数据变量:
var saveData:SaveData;
加载数据:
saveData = sharedObject.data.saveData as SaveData;
if(saveData){
//load your saved data
}else{
saveData = new SaveData();//create a new one since one didn't previously exist
}
在您的应用中,为保存数据对象指定值:
saveData.wrongAttempts++;
然后保存它:
sharedObject.data.saveData = saveData;
sharedObject.flush();
答案 1 :(得分:1)
一种方法是在你的Air应用程序中有一个sqlite数据库,但它需要sql编码技能。 http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118676a5497-7fb4.html