2016-03-27 6 views
0

Ich entwickle ein Spiel, in dem die Spiellogik/der Status selbst von einem Akka FSM Schauspieler verwaltet wird. Einer meiner Zustände ist WaitingForAnswer und die Geschäftslogik in Bezug auf diesen Zustand ist, dass ein Spieler (auch ein Schauspieler) innerhalb von 20 Sekunden antworten muss, sonst verliert er/sie einen Punkt. Also habe ich den Zustand folgendermaßen definiert:Akka FSM Timeout Benachrichtigung

So weit so gut. Nun, was ich tun möchte, ist eine Art Erinnerung - nachdem die Hälfte der Status-Timeout abgelaufen ist (nach 10 Sekunden), möchte ich eine Erinnerung an den Spieler senden, die er bald beantworten muss.

Meine Ideen:

  1. setTimer(name, msg, interval, repeat) verwenden, wenn sie durch die Einstellung der interval-10 Sekunden, um den WaitingForAnswer Zustand eintritt. Auf diese Weise erhält mein FSM-Schauspieler eine Erinnerung und erinnert ihn daran, den Spielerschauspieler zu erinnern. Wie du sehen kannst, ist das ein bisschen ... naja, nicht cool.

  2. Verwenden Sie den Scheduler und sobald mein FSM-Akteur den Status WaitingForAnswer erreicht, planen Sie eine Nachricht für 10 Sekunden in der Zukunft mit dem Spieler-Akteur als Empfänger. Natürlich müsste ich in diesem Fall sicherstellen, dass ich die geplante Nachricht annulliere, wenn der Schauspieler des Spielers rechtzeitig antwortet.

Gibt es noch einen natürlicheren Weg, dies zu erreichen? Irgendeine Art von Haken? Eine Möglichkeit, setTimer mit einem anderen Empfänger zu verwenden?

Antwort

1

Die Art, wie Sie Ihr Problem erklärt haben, scheint Ihr Zustand WaitingForAnswer ist eigentlich 2 verschiedene Zustände, die sich ziemlich ähnlich verhalten. Sie können das Status-Timeout auf 10 Sekunden festlegen. Wenn der Player antwortet, wird die Logik angewendet. Andernfalls wird ein Statusübergang zu WaitingForAnswerAfterReminder mit erneutem 10-Sekunden-Status-Timeout ausgeführt, der von der gleichen Geschäftslogik wie der vorherige Status behandelt wird.

Für mich sieht es so aus, dass Sie versuchen, zwei Zustände innerhalb WaitingForAnswer zu modellieren: vor und nach der Erinnerung.

+0

Danke, Josep. Ich habe deine Präsentation über Game Dev mit Akka rezensiert :) Wie auch immer, am Ende habe ich die Erinnerung auf der Client-Seite implementiert, da sich die Anforderungen leicht geändert haben, aber im Allgemeinen mag ich deine Idee! – Anton

+0

Froh, dass es dir gefallen hat! –