我正在开发一款游戏,游戏逻辑/状态本身由Akka FSM演员管理。我的一个状态是WaitingForAnswer
,与此状态相关的业务逻辑是玩家(也是演员)必须在20秒内回答,否则他/她会失去一分。所以我定义了这样的状态:
when(WaitingForAnswer, 20 seconds) {
// event handling logic here
}
到目前为止一切顺利。现在我要做的是提供一些提醒 - 在状态超时的一半过去之后(10秒之后),我想向播放器发送提醒,他必须回答很快。
我的想法:
通过将setTimer(name, msg, interval, repeat)
设置为10秒,在进入WaitingForAnswer
状态时使用interval
。这样我的FSM演员就会得到提醒,提醒他提醒演员。正如你所看到的那样,这有点......不太酷。
使用调度程序,一旦我的FSM actor进入WaitingForAnswer
状态,将来将玩家角色作为收件人安排10秒的消息。当然,在这种情况下,我必须确保在玩家角色及时响应时取消预定的消息。
还有其他更自然的方式来实现这一目标吗?某种钩子?某种方式将setTimer
与不同的收件人一起使用?
答案 0 :(得分:1)
您解释问题的方式,似乎您的状态 WaitingForAnswer 实际上是2个不同的状态,其行为非常相似。您可以将状态超时定义为10秒,如果播放器应答,则应用逻辑,否则,您将状态转换为 WaitingForAnswerAfterReminder ,再次使用10秒状态超时,该状态超时由与以前的状态。
对我而言,您尝试在 WaitingForAnswer 中建模两个状态:在提醒之前和之后。