我有一個叫房類,包含所有的球員實體的屬性之一的陣列,遊戲服務器OOP設計
players = [];
在客房類是隻返回究竟是誰參賽球員的方法全面。
// below method is called by the room's timer
var getPlayersWhoFinished = function() {
playersWhoFinished = [];
for (i = 0; i < players.length; i++) {
if (players[i].isFinished()) {
playersWhoFinished.push(players[i]);
};
};
return playersWhoFinished;
}
所以我知道我可以只留下上面在客房類作爲是的,但我已經有更復雜的映射其他三個功能,在一個已經大類(300條+線)。 我不明白如何封裝這些排序方法爲其他類,因爲它們是如此密切相關的房類,所有的客房參考發送中選取適當的用戶。
修改上面的代碼並將其插入到Player類中會對我有意義,但唯一可以考慮使用此方法的方法是使用靜態方法並將空間對象發送給它。
// players is now a member of the Player class
Player.getPlayersWhoFinished = function(room, players) {
playersWhoFinished = [];
for (i = 0; i < players; i++) {
if (players[i].getRoom() == room) {
playersWhoFinished.push(players[i]);
}
}
return playersWhoFinished;
}
無論如何,這對我來說似乎很麻煩和不合適。我一直在努力弄清楚如何讓我的Room類儘可能輕鬆。
它不會真正解決你的問題,但你可以在更短的方式以'filter'重新實現這樣的過濾功能:'VAR playersWhoFinished = players.filter(功能(播放器){返回player.isFinished();} );' – icktoofay
尖端,小心與那些未聲明的'i'變量,因爲它們是隱式的全局變量。 – elclanrs
嗯....他們的方式,我會設計它room.getPlayersWhoFinished()將給所有玩家名單。當房間 –