我有一个叫房类,包含所有的球员实体的属性之一的阵列,游戏服务器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()将给所有玩家名单。当房间 –