2009-07-09 17 views
2

私はSharedObjectの持つ文字列と数値を保存するのは簡単なことである知っている、と私はまた、この種のものに精通しています: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に保存できるのでしょうか?私がオンラインで見たすべての場所で、「Flashで使用できるもの」という質問に答えました。それはあまり説明的ではありません。私の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.

1つの警告は、オブジェクトグラフを格納すると、時々ストレージの問題につながることができるということです。あなたに通知してより多くを保存する許可を求める前に、SharedObjectに保存できる量には限界があります。このしきい値はデフォルトで100kです。

2

Flex Builder SDKまたはFlex Builderを使用している場合は、[RemoteClass]メタタグを使用してクラスを自動的に登録し、シリアライズ可能にすることもできます。

関連する問題