如何限制玩家在socket.io游戏中的转弯时间?

时间:2014-04-13 17:00:05

标签: javascript node.js socket.io

我正在尝试使用socket.io模块在node.js中创建一个简单的基于文本回合的游戏。玩家必须有超时才能在轮到他时发送文本。如果他没有这样做,他就会失去机会,现在轮到下一位球员了。

超时是我真正的问题。我做了一些简单的setTimeout来推进转弯,就像这样:

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);
}

问题在于,当玩家发送他的文本时,我需要首先检查轮到他(这是一个相关问题,因为我不确定如何在所有玩家之间共享游戏实例/数据,以及现在我正在使用一个数据库)这可能需要足够的时间让计时器用完并调用下一个转弯,使移动无效或者可能跳转到下一个玩家,因为一旦收到文本,计时器应该停下来,转弯应该前进。

如果我只是在检查移动是否有效之前清除超时,我不知道如果消息无效,如何恢复计时器(即玩家在轮到他之后发送文本,可能是通过摆弄客户端代码/控制台)。

当播放器发送消息而不会遇到这些问题时,如何关闭超时?

1 个答案:

答案 0 :(得分:2)

当您收到移动时,您可以使用clearTimeout(timer)取消当前的计时器。

然后,在您处理了该播放器的移动后,只需从您的移动处理程序代码中调用advancePlayer()即可。这将进入下一个玩家并设置一个新的计时器。