How to limit time of a player's turn in a socket.io game?
我正在尝试使用socket.io模块在node.js中制作一个基于文本回合的简单游戏。玩家必须有超时才能在回合中发送文本。如果他不这样做,他将失去机会,现在轮到下一位玩家了。
超时是我真正的问题。我做了一些简单的
1 2 3 4 5 6 7 8 9 10 11 | var playerIndex = 0; var timer = setTimeout(advancePlayer, turnTime); function advancePlayer() { playerIndex = (playerIndex + 1) % numPlayers; // Warns the players about whose turn is now: aknowledgeTurn(playerIndex); timer = setTimeout(advancePlayer, turnTime); } |
问题在于,当玩家发送文字时,我需要首先检查是否该轮到他了(这是一个相关问题,因为我不确定如何在所有玩家之间共享游戏实例/数据,并且现在我正在使用数据库),这可能会花费足够的时间使计时器用完并调用下一轮,从而使移动无效或可能跳过下一轮的玩家,因为一旦收到文本,计时器就应该停下来,转弯应该前进。
如果我只是在检查移动是否有效之前清除超时,我将不知道如何在出现无效消息的情况下恢复计时器(例如,玩家在回合以外发送了文本,也许是通过与客户摆弄代码/控制台)。
当播放器发送消息时如何关闭超时时间而不会陷入这些问题?
收到动作后,可以使用
然后,在处理了该玩家的移动之后,只需从移动处理程序代码中调用