我正在开发一个游戏,其中游戏逻辑/状态本身由 Akka FSM 演员管理。我的状态之一是WaitingForAnswer
,与此状态相关的业务逻辑是玩家(也是演员)必须在 20 秒内回答,否则他/她将失去一分。所以我这样定义状态:
when(WaitingForAnswer, 20 seconds) {
// event handling logic here
}
到目前为止,一切都很好。现在我想做的是有某种提醒 - 在状态超时的一半过去后(10 秒后),我想向玩家发送提醒,他必须尽快回答。
我的想法:
通过将 设置为 10 秒
setTimer(name, msg, interval, repeat)
进入WaitingForAnswer
状态时使用。interval
这样我的 FSM 演员就会得到一个提醒,提醒他提醒玩家演员。正如你所看到的,这有点......不太酷。使用调度程序,一旦我的 FSM 演员进入
WaitingForAnswer
状态,安排一条消息在未来 10 秒内以玩家演员作为接收者。当然,在这种情况下,我必须确保在玩家演员及时响应时取消预定的消息。
有没有其他更自然的方法来实现这一点?某种钩子?某种方式setTimer
与不同的收件人一起使用?