1

AS 3.0 のこの部分は初めてです。Lee Burrows の例を見つけました。それは問題なく動作しますが、オブジェクトの複雑な配列または少なくとも多次元配列を送信する必要があります。そして、私はそれを機能させることができません。

それと1週間格闘。誰でも助けることができますか?

コードの一部は次のとおりです。

 private function netHandler(event:NetStatusEvent):void
    {
        //update UI
        outputText.text +=  "[EVENT]\n" + event.info.code + "\n";
        //handle event
        switch (event.info.code)
        {
                //connection succeeded so setup a group
            case "NetConnection.Connect.Success" :


                ns1 = new NetStream(netConn);

                setupGroup();
                break;
                //group setup succeeded so enable submit
            case "NetGroup.Connect.Success" :
                submitButton.enabled = true;
                break;
                //posting received so add to output
            case "NetGroup.Posting.Notify" :


                var myObjectList:Array = new Array();
                myObjectList = event.info.message;
                dl.dataProvider = myObjectList[0];
                dl.rowCount = myObjectList[0].length;
                gd.dataProvider = myObjectList[1];
                gd.rowCount = myObjectList[1].length;
                outputText.text +=  "[RECEIVED]\n" + event.info.message.txt + "\n";
                break;
        }
    }

エラーが発生しました

TypeError: エラー #1034: 型強制に失敗しました: Object@7bc4dd9 を fl.data.DataProvider に変換できません。

4

3 に答える 3

1

JSON の使用を検討していますか?

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html

stringify() を使用して JSON に変換し、反対側で parse() を使用してデコードします。「反対側」が AS3 でない場合、どの言語でも簡単に JSON を解析できるはずです。

于 2013-09-21T17:11:13.363 に答える
0

Array/Vector/Object を Flash がネイティブにサポートするようになった JSON オブジェクトに変換すると、簡単に実行できます。

于 2013-09-21T17:10:57.860 に答える
0

私が行う方法は、ByteArray オブジェクトに配列を (自動的に) AMF にシリアル化し、圧縮して送信させることです。

データの送信:

var byteArray:ByteArray = new ByteArray();
var array:Array = [[new Date(), 24], [new Shape(), 24.5], 1 / 2];
byteArray.writeObject(array);
byteArray.compress(CompressionAlgorithm.LZMA); //Optional
netGroup.sendTo-AllNeighbors/nearest/Neighbor(byteArray);

データ受信中:

//private function onReceiveData(data:Object):void 
var byteArray:ByteArray = data as ByteArray;
byteArray.uncompress(CompressionAlgorithm.LZMA); //if compressed
var array:Array = byteArray.readObject();
trace("@", getTimer(), ": ", array, "\n");

出力:

@2676: Sun Sep 22 02:41:36 GMT+0300 2013,24,[object Object],24.5,0.5

もちろん、AS3 アプリケーション以外で必要な場合は、使用する他の言語用のサード パーティ ライブラリ (多数あります!) を使用する必要があります。

あなたの他のオプションはJSONを使用することですが、転送するデータははるかに大きくなり、解析にははるかに時間がかかると思います(文字列操作とバイナリデータへの最適化されたアクセス!)


EDIT:カスタムクラスを(汎用オブジェクトではなくカスタムクラスとして)シリアル化して読み戻すには、次のようにクラスエイリアスを事前に登録する必要があります。

import flash.net.registerClassAlias
registerClassAlias("com.CustomClass", CustomClass);
于 2013-09-21T23:54:09.183 に答える