2009-07-09 63 views
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 [email protected] to GameStage. 

我想我的问题是:什么样的数据类型可以存储在一个SharedObject?我在网上看到的所有地方都回答了“闪存中可以使用的任何内容”这个问题,这个描述不是很明确 - 显然我的GameStage类也在Flash中工作。有没有关于从我不知道的SharedObject中检索数据的问题?

我的预测是我无法以这种方式存储舞台数据。如果是这样,任何人都可以提出另一种保存数据的方法吗?

回答

6

您可以存储任何物体在SharedObject,但是你需要先注册类:

You can store typed ActionScript instances in shared objects. You do this by calling the flash.net.registerClassAlias() method to register the class. If you create an instance of your class and store it in the data member of your shared object and later read the object out, you will get a typed instance. By default, the SharedObject objectEncoding property supports AMF3 encoding, and unpacks your stored instance from the SharedObject object; the stored instance retains the same type you specified when you called the registerClassAlias() method.

一个需要注意的是,存储对象图有时会导致存储问题。在通知用户并请求存储更多权限之前,您可以在SharedObject中存储多少存储限制。我相信这个门槛默认为10万。

2

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

相关问题