【发布时间】:2014-04-14 01:29:06
【问题描述】:
我正在尝试使用 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);
}
问题是当玩家发送他的文本时,我需要先检查是否轮到他(这是一个相关的问题,因为我不确定如何在所有玩家之间共享游戏实例/数据,并且现在我正在使用数据库),这可能需要足够的时间让计时器用完并调用下一个回合,从而使移动无效或可能跳过下一个玩家的回合,因为一旦收到文本,计时器应该停止,转弯应该前进。
如果我只是在检查移动是否有效之前清除超时,我不知道如何在出现无效消息的情况下恢复计时器(即玩家在轮到他之外发送了一条文本,可能是通过摆弄客户端代码/控制台)。
如何在播放器发送消息时关闭该超时而不陷入这些问题?
【问题讨论】:
标签: javascript node.js socket.io