Отправка массива с помощью writeObject () - PullRequest
0 голосов
/ 23 декабря 2011

В настоящее время я работаю над пошаговой многопользовательской игрой, использующей 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;
        }

        }
    }
}

Ответы [ 3 ]

0 голосов
/ 24 декабря 2011

Можете ли вы опубликовать код, который на самом деле хранит и извлекает класс Player в SharedObject?Дважды проверьте ограничение размера Flash Player по умолчанию для SO.,,он может быть отключен или слишком мал (это будет проблемой для отдельных пользователей, поэтому вам придется проверить настройку размера SO в FP для финальной игры).

0 голосов
/ 29 июня 2015

Краткий ответ - вы должны либо объявить свой массив как открытый, либо реализовать интерфейс flash.utils.IExternalizable (методы readExternal () и writeExternal ()).

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/IExternalizable.html

Интерфейс IExternalizable обеспечивает управление сериализацией класса при его кодировании в поток данных.Методы writeExternal () и readExternal () интерфейса IExternalizable реализуются классом для обеспечения возможности настройки содержимого и формата потока данных (но не имени класса или типа) для объекта и его супертипов.Каждый отдельный класс должен сериализовать и восстанавливать состояние своих экземпляров.Эти методы должны быть симметричны супертипу, чтобы сохранить его состояние.Эти методы заменяют поведение сериализации родного Action Message Format.

Если класс не реализует и не наследует от класса, который реализует интерфейс IExternalizable, то экземпляр класса будет сериализован с использованиеммеханизм по умолчанию только для публичных членов.В результате частные, внутренние и защищенные члены класса будут недоступны.

0 голосов
/ 23 декабря 2011

Вы пытались добавить публичный установщик для массива?Я думаю, что это твоя проблема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...