我正在創建一個多人遊戲,並且在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循環。 –