使用 writeObject() 发送数组
目前我正在使用 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;
}
}
}
}
Currently I'm working on a turn based multiplayer game using stage3D. When the server sends a object for example the code below everything goes very smooth on the client side.
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 + "");
}
}
}
But when I put an array in the object the array always returns length 0. And now I'm a bit out of options. I used 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;
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您是否尝试过为数组添加公共设置器?我认为这是你的问题
Have you tried adding public setter for the array? I think that's your problem
您可以发布在 SharedObject 中实际存储和检索 Player 类的代码吗?仔细检查 Flash Player 对 SO 的默认大小限制。 。 。它可能被关闭,或者太小(这对于个人用户来说是一个问题,所以你必须验证最终游戏的 FP 的 SO 大小设置)。
Can you post the code that actually stores and retrieves the Player class in a SharedObject? Double-check the Flash Player's default size limit for SOs . . . it may be turned off, or too small (this will be a problem for individual users, so you will have to verify FP's SO size setting for the final game).
简短的回答 - 您应该将数组声明为公共数组,或者实现 flash.utils.IExternalizable 接口(readExternal() 和 writeExternal() 方法)。
http://help.adobe.com/en_US /FlashPlatform/reference/actionscript/3/flash/utils/IExternalizable.html
Short answer - you should either declare your array as public, or implement the flash.utils.IExternalizable interface (readExternal() and writeExternal() methods).
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/IExternalizable.html