我目前正在使用 Javascript 开发多人游戏,我的 PlayerList 数据结构/对象似乎有一个非常特殊的问题。
这是对象:
var PlayerList = function(){
this.list = {};
}
该对象具有我通过执行添加的几种方法...
PlayerList.prototype.method = function(){...}
方法有:addPlayer、removePlayer、playerInList、findPlayer、jsonify和unjsonify。我对unjsonify有很大的问题。这是代码:
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
console.log(li.list.x);
console.log(li.list.y);
console.log(li.list);
//insert the fake player objects from the fake list into the new list as real player objects
for(p in object.list){
var pObj = object.list[p];
//create real player object
var player = new Player(pObj.name, pObj.x, pObj.y, pObj.velX, pObj.velY);
li.addPlayer(player);
}
return li;
}
这样做的原因是因为如果我只是解析服务器发送的 jsonList 对象,结果对象具有正确的结构,但没有一个 PlayerList 应该具有的方法。
这就是问题所在:我后来注意到,当我浏览 PlayerList.list 并绘制每个玩家时,我收到了这个错误:
未捕获的类型错误:对象 NaN 没有方法“getX”
事实证明,由于某种原因,当我在unjsonify中创建一个新的 PlayerList 时,它有两个额外的字段 x 和 y,都设置为NaN。问题出现在这里:
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
出于某种非常奇怪的原因,li并不是应有的新的空 PlayerList。它包含两个额外的变量 x 和 y,都设置为NaN。更奇怪的是,它不仅不是一个新的空列表,它还包含当前在服务器上的所有播放器——这对我来说似乎是不可能的,因为客户端第一次获取包含 json 播放器列表的包时它甚至没有有自己的过去版本可以摆脱。
最重要的是,如果您查看unjsonify的代码块, console.log(li.list.x) 和 console.log(li.list.y) 都输出undefined,然后是 console.log(li.list ) 输出一个对象,该对象(除了服务器上的所有玩家)字段 x 和 y 设置为 NaN。
我完全不知道这怎么可能发生。似乎没有人可以解决这些错误之一,因为它们没有任何意义。但是,如果有人对如何帮助我有丝毫的想法,那将不胜感激!
我应该注意,在我拥有这个 PlayerList 对象之前,我只是使用了一个没有任何方法的对象原语并手动完成了所有操作(例如 pList.username = player 添加玩家等)并且一切正常(我可以看到其他玩家移动在我的屏幕上等)但由于此时它变得相当大,我想添加一些结构,因此我创建了这个 PlayerList 对象,它应该使我的代码更有条理和漂亮,但到目前为止只引起了比其他任何事情更多的问题.