gpt4 book ai didi

JavaScript 对象在创建时变得疯狂?

转载 作者:行者123 更新时间:2023-11-30 06:41:31 26 4
gpt4 key购买 nike

我目前正在使用 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 并绘制每个玩家时,我得到了这个错误:

Uncaught TypeError: Object NaN has no method '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) 都输出 < em>未定义,但随后 console.log(li.list) 输出一个对象,其中(除了服务器上的所有玩家之外)字段 x 和 y 设置为 NaN。

我完全不知道这怎么可能发生。似乎这些错误中的一个没有人可以解决,因为它们根本没有任何意义。但是,如果有人对如何帮助我有丝毫想法,将不胜感激!

我应该注意到,在我拥有这个 PlayerList 对象之前,我只是简单地使用了一个没有任何方法的对象基元,并手动完成了所有操作(例如 pList.username = player 以添加玩家等...)并且一切正常(我可以看到其他玩家在我的屏幕上移动,等等。)但由于此时它变得相当大,我想添加一些结构因此我创建了这个 PlayerList 对象,它应该使我的代码更加结构化和漂亮但到目前为止只有造成的问题比其他任何事情都多。

最佳答案

您的 PlayerList 没有 .addPlay 方法。

当您使用代码时,更容易在可读的地方命名您的变量。

 function PlayerList() {
this.list = [];
};
//
PlayerList.prototype.unjsonify = function (jsonList) {
var jsonLst = JSON.parse(jsonList),
myPlayerList = new PlayerList(),
player,
jsonItem;
//
for (var i = 0; i < jsonLst.list.length; i++) {
jsonItem = jsonLst.list[i];
//
player = new Player(jsonItem.name, jsonItem.x, jsonItem.y, jsonItem.velX, jsonItem.velY);

myPlayerList.list.push(player);

};
return myPlayerList;
};

我已将您的 Player.list 从对象更改为数组。

关于JavaScript 对象在创建时变得疯狂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com