package { import flash.display.Sprite; import flash.text.TextField; import flash.utils.getTimer; import jp.dip.hael.gameai.fsm.FSM; /** * @private */ public class FSMTest extends Sprite { public function FSMTest() { var fsm:FSM = new FSM(); // 状態1→0.7の確率で2へ、0.3の確率で3へ fsm.registerState(state1, function():Boolean{ return true; }, [[state2, 0.7], [state3, 0.3]]); // 状態2→0.7の確率で1へ、そうでなければ遷移しない fsm.registerState(state2, function():Boolean{ return true; }, [[state1, 0.7]]); // 状態3→flag2がtrueなら2へ、falseなら1へ fsm.registerState(state3, function():Boolean{ return flag2; }, [[state2, 1.0]]); fsm.registerState(state3, function():Boolean{ return !flag2; }, [[state1, 1.0]]); // 初期状態は1 fsm.registerStartup(state1); var t:int = getTimer(); for(var i:int = 0; i < 1000000; i++){ fsm.update(); } var t1:int = getTimer() - t; var tf:TextField = new TextField(); tf.text = t1 + "ms"; addChild(tf); } public function state1():void { // trace("state1"); // flag2 = true; } public function state2():void { // flag2 = false; // trace("state2"); } public function state3():void { // trace("state3"); } private var flag1:Boolean, flag2:Boolean, flag3:Boolean; } }