我正在创建一个多人游戏,并且在javascript中有一个对象,并带有一些键和值。如何从更新中修改对象并删除旧密钥?
该对象被称为玩家,用于保存关于连接到游戏服务器的每个玩家的信息。
name
是对象的键,然后该对象的值是一个Player
对象保持的信息,如x
,y
,level
等
不断我向服务器发送一个请求,以获取有关玩家的更新信息。
因为发生这种情况,很多时候,我不希望players
对象是每次都重设(players = {}
),所以反而,我更新任何新信息的对象。
目前我检查if name in players
,如果是这样,我更新这样的对象:
players[name].x = x;
players[name].y = y;
// etc.
否则,我只需创建一个新Player
对象,以信息,并将其添加到players
对象。 (如果连接例如一个新的播放器)
的问题是,如果一个球员已在players
不再从服务器更新后的信息(即播放器断开),我怎么去从删除它们物体。
是否有必要循环低谷players
,如果玩家不再处于更新信息中,请将其从对象中移除,或者有没有更简单的方法来做到这一点?
如果没有其他方法,重置字典并添加数据是否更好?感觉这并不是做这种简单事情的最佳方式。
这里是我到目前为止的代码:
var newplayers = new info from server;
for(var i=0; i<newplayers.length; i++)
{
var pl = newplayers[i];
var name = pl.name;
var x = pl.x;
var y = pl.y;
// etc.
if(name in players)
{
players[name].x = x;
players[name].y = y;
// etc.
} else
newplayer = new Player();
newplayer.x = x;
newplayer.y = y;
// etc.
players[name] = newplayer;
}
}
// What if the player is no longer in the updated info, but still in players?
所有帮助感激!提前致谢!
请注意,词典在JavaScript中称为对象。 – JJJ
谢谢你让我知道。我以为你可以使用两个名字。我会更新这个问题。 –
由于您正在更新旧玩家的信息并将新玩家添加到旧玩家,那么我们可以简单地设置“玩家=新玩家”我没有看到需要for循环。 –