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