2016-06-21 108 views
0

我正在創建一個多人遊戲,並且在javascript中有一個對象,並帶有一些鍵和值。如何從更新中修改對象並刪除舊密鑰?

該對象被稱爲玩家,用於保存關於連接到遊戲服務器的每個玩家的信息。

name是對象的鍵,然後該對象的值是一個Player對象保持的信息,如xylevel

不斷我向服務器發送一個請求,以獲取有關玩家的更新信息。

因爲發生這種情況,很多時候,我不希望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? 

所有幫助感激!提前致謝!

+0

請注意,詞典在JavaScript中稱爲對象。 – JJJ

+0

謝謝你讓我知道。我以爲你可以使用兩個名字。我會更新這個問題。 –

+0

由於您正在更新舊玩家的信息並將新玩家添加到舊玩家,那麼我們可以簡單地設置「玩家=新玩家」我沒有看到需要for循環。 –

回答

1

因此,您可以選擇從您的players字典中刪除過時的數據,或每次從頭開始重新構建它?

我認爲答案取決於你有多少數據。如果你最多有20名玩家,那麼可能無關緊要。如果你有100萬玩家,那就不一樣了。

如果您想確定,最好的辦法是測量它。嘗試兩種解決方案,讓您希望能夠處理的玩家人數最多,並查看對性能的影響。

或只是去最簡單的實現,看看它是否足夠你的目的。在你需要之前沒有必要進行優化。

就我個人而言,我只是循環通過players刪除過時的數據。如果表現不夠好,那麼我會優化。

+0

感謝您的諮詢!一次可能有多達一百名玩家,但它可能會很好。 –

相關問題