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() メソッドを呼び出したときに指定したものと同じ型を保持します。

1 つの注意点は、オブジェクト グラフを格納すると、ストレージの問題が発生する場合があることです。ユーザーに通知し、さらに保存する許可を求める前に、SharedObject に保存できる量には制限があります。このしきい値はデフォルトで 100k だと思います。

于 2009-07-09T19:59:15.637 に答える
2

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

于 2009-07-10T17:08:40.143 に答える