В настоящее время я работаю над многопользовательской игрой на 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: объект NaN не имеет метода getX
Как оказалось, по какой-то причине, когда я создал новый PlayerList в unjsonify, в нем было два дополнительных поля, 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, который должен сделать мой код более структурированным и красивым, но до сих пор вызывал только больше проблем чем что-либо еще.