ActionScript 3.0 如何通过网络发送对象的多维数组



我是AS 3.0这一部分的新手。我找到了李·伯罗斯(Lee Burrows)的例子。这工作正常,但我需要发送一个复杂的对象数组或至少是多维数组。而且我无法让它工作。

挣扎了一个星期。谁能帮忙?

以下是代码的各个部分:

 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;
        }
    }

我收到错误

类型错误: 错误 #1034: 类型强制失败: 无法将Object@7bc4dd9转换为 fl.data.DataProvider。

您是否考虑过使用 JSON?

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

只需使用 stringify() 将其转换为 JSON,另一端的 parse() 即可对其进行解码。如果"另一端"不是AS3,您应该能够以任何语言轻松解析JSON。

如果您将数组/矢量/对象转换为 Flash 现在本机支持的 JSON 对象,则可以轻松完成此操作。

我这样做的方法是让 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,但我想要传输的数据会大得多,解析它需要更多的时间(字符串操纵与优化的二进制数据访问!


编辑:要序列化和回读自定义类(作为自定义类而不是泛型对象),您应该事先注册一个类别名,如下所示:

import flash.net.registerClassAlias
registerClassAlias("com.CustomClass", CustomClass);

相关内容

  • 没有找到相关文章

最新更新