Actionscript 3 正在发送具有writeObject()的数组

Actionscript 3 正在发送具有writeObject()的数组,actionscript-3,adobe,air,Actionscript 3,Adobe,Air,目前我正在使用stage3D开发一款基于回合的多人游戏。例如,当服务器发送一个对象时,下面的代码在客户端运行得非常顺利 package models { public class Player { public var type:String = "player"; private var _action:String; private var _id:int; private var _username:St

目前我正在使用stage3D开发一款基于回合的多人游戏。例如,当服务器发送一个对象时,下面的代码在客户端运行得非常顺利

package models 
{
    public class Player 
    {
        public var type:String = "player";
        private var _action:String;
        private var _id:int;

        private var _username:String;
        private var _nickname:String;

        public function Player() 
        {

        }

        public function get id():int 
        {
            return _id;
        }

        public function set id(value:int):void 
        {
            _id = value;
        }

        public function get username():String 
        {
            return _username;
        }

        public function set username(value:String):void 
        {
            _username = value;
        }

        public function get nickname():String 
        {
            return _nickname;
        }

        public function set nickname(value:String):void 
        {
            _nickname = value;
        }

        public function get action():String 
        {
            return _action;
        }

        public function set action(value:String):void 
        {
            _action = value;
        }
        public function toString():String
        {
            return("id: " + id + " username: " + username + " nickname: " + nickname + "");
        }
    }

}
但是当我在对象中放置数组时,数组总是返回长度0。现在我已经没有选择了。我用了registerClassAlias

package models 
{
    /**
     * ...
     * @author RB
     */
    public class ListOfPlayers
    {
        public var type:String = "list_of_players";

        private var _list:Array = new Array();

        public function ListOfPlayers() 
        {

        }

        public function remove(i:int):void 
        {
            _list.slice(i);
        }

        public function add(player:Player):void 
        {
            _list.push(player);
        }

        public function get list():Array 
        {
            return _list;
        }

        }
    }
}

是否尝试为数组添加公共setter?我想这是你的问题

你能发布在SharedObject中实际存储和检索Player类的代码吗?再次检查Flash播放器的SOs默认大小限制。它可能已关闭,或者太小(这对单个用户来说是个问题,因此您必须在最后一场游戏中验证FP的so大小设置)。

简短回答-您应该将数组声明为公共数组,或者实现flash.utils.IExternalizable接口(readExternal()和writeExternal()方法)

IExternalizable接口在将类编码到数据流中时提供对其序列化的控制。IExternalizable接口的writeExternal()和readExternal()方法由类实现,以允许为对象及其超类型自定义数据流的内容和格式(而不是类名或类型)。每个单独的类都必须序列化和重构其实例的状态。这些方法必须与超类型对称才能保存其状态。这些方法取代了本机操作消息格式(AMF)序列化行为

如果一个类没有实现,也没有从 实现IExternalizable接口,然后实现 类将使用公共成员的默认机制序列化 只有因此,类的私有、内部和受保护成员 将不可用