0

ゲーム用にタイル マップ エディターを作成しました。ユーザーがデザインを完了すると、ファイルが生成されます。このファイルには、使用されるアセットとその他の情報が保存されます。

これは、ファイルを生成する方法に関するコードです

                var ba:ByteArray = new ByteArray();
                var masterData:Object = { map:Data.instance.mapLayerArr, 
                                               asset:assetCollection, 
                                               gridrow:Data.instance.gridRow,
                                               gridColumn: Data.instance.gridColumn,
                                               cellWidth: Data.instance.cellWidth,
                                               cellHeight: Data.instance.cellHeight,
                                               assetCount: Data.instance.assetCount,
                                               layerCount: Data.instance.layerCount,
                                               version: Data.instance.version};

                ba.writeObject(masterData);
                ba.compress();
                file = new FileReference();
                file.save(ba, Data.instance.fileName);

生成されたファイルをゲーム内に埋め込みたいときに問題が発生します。

これは私のプログラムのコードです。

    [Embed(source='../../../../res/tilemapdata/File Name', mimeType='application/octet-stream')]
    public static const TileMapFile:Class;

    public function TileMapLoader() 
    {
        var byteArray:ByteArray;
        byteArray = new TileMapFile();

        byteArray.uncompress();
        var obj:Object;
        obj = byteArray.readObject();
        trace(fileReference);
    }

実行するたびに「obj = byteArray.readObject();」で終わります このエラーが表示されます。

[Fault] exception, information=ArgumentError: Error #2173: Unable to read object in stream.  The class flex.messaging.io.ArrayCollection does not implement flash.utils.IExternalizable but is aliased to an externalizable class.
4

3 に答える 3

0

奇妙なクラスを使用していますflex.messaging.io.ArrayCollection-そのようなインポートをすべて。に置き換えてみてくださいmx.collections.ArrayCollection

また、ファイルに保存されているすべてのクラスに[RemoteClass]メタタグが付いていることを確認してください。そうでない場合は、インスタンスとして復元されObjectます。

于 2011-09-09T10:41:23.097 に答える
0

ArrayCollection エイリアスが次の方法で登録されていることを確認します。

import mx.collections.ArrayCollection;
...
registerClassAlias("flex.messaging.io.ArrayCollection", ArrayCollection);

それ以外の:

import mx.collections.ArrayCollection;
...
registerClassAlias("mx.collections.ArrayCollection", ArrayCollection);

説明があります: http://livedocs.adobe.com/blazeds/1/javadoc/flex/messaging/io/ArrayCollection.html

于 2012-04-22T23:40:31.100 に答える
0

状況についてよく読んでください (adobe の公式ドキュメント): ( Explicitly mapping ActionScript and Java objects )

私は同じ問題を経験しました。解決に役立つ一般的なルール:

  • クライアント側のアクション スクリプト クラスでメタタグ [RemoteClass] を明示的に宣言したほうがよいでしょう。
  • サーバー側のクラス (リスト、配列など) のコレクションは、mx.collections.ArrayCollection によってクライアント側のフラッシュを表すと扱いやすくなります。
  • ある時点で、逆シリアル化が発生する前にコーディングして、サーバー側のクラス関係を持つクライアント側の Flash クラスを明示的に宣言する必要がある場合があります。flash.net.registerClassAlias("net.acme.serverside.Foo", clientside.Foo );そうしないと、逆シリアル化後にオブジェクトがジェネリックとして型指定されなくなりますflash.Object
于 2012-01-30T21:07:15.437 に答える