我正在开发一个游戏,游戏逻辑/状态本身由Akka FSM演员管理。我的状态之一是WaitingForAnswer,与此状态相关的业务逻辑是,玩家(也是参与者)必须在20秒内回答,否则他/她就会失去一分。所以我这样定义了这个州:
when(WaitingForAnswer, 20 seconds) {
// event handling logic here
}到目前一切尚好。现在我要做的是有一些提醒-在状态超时的一半已经过去(10秒后),我想发送一个提醒给球员,他必须尽快回答。
我的想法:
setTimer(name, msg, interval, repeat)设置为10秒,在进入WaitingForAnswer状态时使用interval。这样,我的FSM演员将得到提醒,提醒他提醒演员。你可以看到这有点..。不是很酷。WaitingForAnswer状态,在未来的10秒内安排一条消息,将该播放器参与者作为接收者。当然,在这种情况下,我必须确保在播放器参与者及时响应时取消预定的消息。还有其他更自然的方法来实现这一点吗?某种钩子?对不同的接收者使用setTimer的一些方法?
发布于 2016-03-27 14:26:41
按照您解释问题的方式,您的状态WaitingForAnswer实际上是两个行为非常相似的不同状态。您可以将状态超时定义为10秒,如果播放机回答,则应用逻辑,否则,您将执行状态转换到WaitingForAnswerAfterReminder,状态超时将再次由与前一个状态相同的业务逻辑处理。
在我看来,您似乎试图在WaitingForAnswer中建模两种状态:提醒之前和之后。
https://stackoverflow.com/questions/36245643
复制相似问题