Важно отметить, что при использовании конечного автомата на основе стека каждое состояние несет ответственность за свое удаление из стека при отсутствии необходимости в нем. Например, состояние attack () само должно удалять себя из стека в том случае, если враг был уже уничтожен.
public class Ant.
public var brain: StackFSM;
public function Ant (posX :Number, posY: Number) {.
brain = new StackFSM ();
// Начинаем с поиска листка.
brain.pushState (findLeaf); }.
public function findLeaf () :void {.
// Перемещает муравья к листу.
velocity = new Vector3D (Game.instance.leaf.x — position. x, Game.instance.leaf.y — position. y);
if (distance (Game.instance.leaf, this) <= 10) {.
//Муравей только что подобрал листок, время.
// возвращаться домой!
brain.popState (); // removes «findLeaf» from the stack.
brain.pushState (goHome); // push «goHome» state, making it the active state. }.
if (distance (Game.mouse, this) <= MOUSE_THREAT_RADIUS) {.
// Курсор мыши рядом. Надо бежать!
// Состояние «runAway» добавляется перед «findLeaf», что означает,.
// что состояние «findLeaf» вновь будет активным при завершении состояния «runAway». brain. pushState (runAway); } }.
public function goHome () :void {.
// Перемещает уравья к дому.
velocity = new Vector3D (Game.instance.home.x — position. x, Game.instance.home.y — position. y);
if (distance (Game.instance.home, this) <= 10) {.
// Муравей уже дома. Пора искать новый лист.
brain.popState (); // removes «goHome» from the stack.
brain.pushState (findLeaf); // push «findLeaf» state, making it the active state }.
if (distance (Game.mouse, this) <= MOUSE_THREAT_RADIUS) {.
// Курсор мыши рядом. Надо бежать!
// Состояние «runAway» добавляется перед «goHome», что означает,.
// что состояние «goHome» вновь будет активным при завершении состояния «runAway». brain. pushState (runAway); } }.
public function runAway () :void {.
// Перемещает муравья подальше от курсора.
velocity = new Vector3D (position.x — Game.mouse.x, position. y — Game.mouse.y);
// Курсор все еще рядом?
if (distance (Game.mouse, this) > MOUSE_THREAT_RADIUS) {.
// Нет, уже далеко. Пора возвращаться к поискам листочкев.
brain.popState (); } } (…) }.