2

我知道用 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 检索数据的事情?

我的预测是我将无法以这种方式存储我的舞台数据。如果是这种情况,有人可以提出另一种保存数据的方法吗?

4

2 回答 2

6

您可以将任何对象存储在SharedObject中,但您需要先注册该类:

您可以将类型化的 ActionScript 实例存储在共享对象中。为此,您可以调用 flash.net.registerClassAlias() 方法来注册该类。如果您创建类的实例并将其存储在共享对象的数据成员中,然后将对象读出,您将获得一个类型化的实例。默认情况下,SharedObject objectEncoding 属性支持 AMF3 编码,并从 SharedObject 对象中解压缩存储的实例;存储的实例保留您在调用 registerClassAlias() 方法时指定的相同类型。

一个警告是,存储对象图有时会导致存储问题。在 SharedObject 通知用户并请求存储更多的权限之前,您可以在 SharedObject 中存储多少是有限制的。我相信这个阈值默认为 100k。

于 2009-07-09T19:59:15.637 回答
2

如果您使用的是 Flex Builder SDK 或 Flex Builder,您还可以使用 [RemoteClass] 元标记,它会自动注册该类并使其可序列化。

于 2009-07-10T17:08:40.143 回答