0

我正在开发一个游戏,其中游戏逻辑/状态本身由 Akka FSM 演员管理。我的状态之一是WaitingForAnswer,与此状态相关的业务逻辑是玩家(也是演员)必须在 20 秒内回答,否则他/她将失去一分。所以我这样定义状态:

when(WaitingForAnswer, 20 seconds) {
    // event handling logic here
}

到目前为止,一切都很好。现在我想做的是有某种提醒 - 在状态超时的一半过去后(10 秒后),我想向玩家发送提醒,他必须尽快回答。

我的想法:

  1. 通过将 设置为 10 秒setTimer(name, msg, interval, repeat)进入WaitingForAnswer状态时使用。interval这样我的 FSM 演员就会得到一个提醒,提醒他提醒玩家演员。正如你所看到的,这有点......不太酷。

  2. 使用调度程序,一旦我的 FSM 演员进入WaitingForAnswer状态,安排一条消息在未来 10 秒内以玩家演员作为接收者。当然,在这种情况下,我必须确保在玩家演员及时响应时取消预定的消息。

有没有其他更自然的方法来实现这一点?某种钩子?某种方式setTimer与不同的收件人一起使用?

4

1 回答 1

1

您解释问题的方式似乎是您的状态WaitingForAnswer实际上是 2 个行为非常相似的不同状态。您可以将状态超时定义为 10 秒,如果玩家回答,则应用逻辑,否则,您将状态转换到WaitingForAnswerAfterReminder并再次设置 10 秒状态超时,该状态由与前一个状态相同的业务逻辑处理。

在我看来,您尝试在WaitingForAnswer中对两种状态进行建模:提醒之前和之后。

于 2016-03-27T14:26:41.017 回答