我知道用SharedObject存储字符串和数字是一件简单的事情,并且我也很熟悉这种事情:
var sharedObject:SharedObject = SharedObject.getLocal("userData");
var obj:Object = new Object();
obj.prop = "value";
sharedObject.data.userobj= obj;
sharedObject.flush();
但是,我正在尝试存储GameStage类的对象,该类已定义为保存有关游戏阶段数据的类。这种事情似乎不起作用:
var sharedObject:SharedObject = SharedObject.getLocal("userData");
var stageOne:GameStage = new GameStage();
stageOne.highScore = 99999;
sharedObject.data.stageOne = stageOne;
sharedObject.flush();
这段代码不会引发错误,但是当我稍后尝试检索阶段数据时,如下所示:
stageOne = sharedObject.data.stageOne;
我收到此错误:
TypeError: Error #1034: Type Coercion failed: cannot convert Object@3d220629 to GameStage.
我想我的问题是:究竟哪种数据类型可以存储在SharedObject中?我在网上看到的每个地方都用“ Flash中可以使用的所有内容”回答了这个问题,但描述性不是很好-显然我的GameStage类也可以在Flash中使用。关于我不知道的有关从SharedObject检索数据的事情吗?
我的预测是,我将无法以这种方式存储舞台数据。如果是这样的话,有人可以建议另一种保存数据的方法吗?
最佳答案
您可以将任何对象存储在SharedObject中,但需要首先注册该类:
您可以存储键入的ActionScript
共享对象中的实例。你做
通过调用
flash.net.registerClassAlias()方法
注册课程。如果您创建
类的实例并存储它
在您共享的数据成员中
对象,然后读取该对象,
您将获得一个类型化的实例。通过
默认情况下,SharedObject
objectEncoding属性支持AMF3
编码,然后解压缩您存储的文件
SharedObject对象的实例;
存储的实例保留相同
您在致电时指定的类型
registerClassAlias()方法。
一个警告是,存储对象图有时会导致存储问题。在SharedObject通知用户并请求允许存储更多内容之前,它可以存储的数量是有限制的。我相信默认情况下此阈值为100k。