>flabakaさん
すばやい返信ありがとうございます。
--
Waitコマンド(id:"wait1")を実行中にステージをクリックすると、
Waitコマンドの終了を待ってから、コマンドを中断させます。
--
上記の「コマンドを中断させます。」というのはWaitコマンド(id:"wait1")の終了タイミングでSerialListを中断させて、Waitコマンド(id:"wait1")以下の処理を実行させない意でした。
僕の質問の分かりづらい表記、申し訳ありません。
flabakaさんのやり方は非常に参考になりました。ありがとうございます。
1.Waitコマンド(id:"wait1")実行中にクリック
2.Waitコマンド(id:"wait1")が完了を待つ
3.Waitコマンド(id:"wait1")が完了後にSerialList中断
4.Waitコマンド(id:"wait1")以降に登録されたコマンドは実行されない。
という処理をおこないたいと思っています。
var list:SerialList = new SerialList(null,
new Trace("Command1", { id:"id_Trace1" } ),
new Wait(5000,{id:"wait1"}),
new Trace("Command2", { id:"id_Trace2" } ),
new Trace("Command3", { id:"id_Trace3" } ),
new Trace("Command4", { id:"id_Trace4" } ),
new Trace("Command5", { id:"id_Trace5" } )
);
list.execute();
最初のポストと同様のイベントリスナーを登録しています。
stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void
{
var command:Command = list.getCommandById("wait1");
command.addEventListener(CommandEvent.COMMAND_COMPLETE, function(e:CommandEvent):void
{
list.interrupt(true);
trace("interrupt Command");
});
});
とするとして、僕の意図した動きとしては、
Command1
interrupt Command
実際は、以下のようになってしまいます。
Command1
Command2
Command3
Command4
Command5
interrupt Command
いろいろ試した結果、Waitコマンドや、DoTweenerを挟んだりすると、以下の結果になりました。
var list:SerialList = new SerialList(null,
new Trace("Command1", { id:"id_Trace1" } ),
new Wait(5000,{id:"wait1"}),
new Wait(300,{id:"wait2"}), //or new DoTweener(this,{alpha:0,time:0.3})
new Trace("Command2", { id:"id_Trace2" } ),
new Trace("Command3", { id:"id_Trace3" } ),
new Trace("Command4", { id:"id_Trace4" } ),
new Trace("Command5", { id:"id_Trace5" } )
);
list.execute();
出力
Command1
interrupt Command
Verbose.enabled = trueにして、ログを見てみると、
[WARNING] デバッグ接続に失敗しました。
[LOG] <SerialList : command_7> コマンドを実行。
[LOG] <Trace : id_Trace1> コマンドを実行。
Command1
[LOG] <Wait : wait1> コマンドを実行。
[LOG] <Wait : wait2> コマンドを実行。
[LOG] <SerialList : command_7> コマンドを中断。
[LOG] <Wait : wait2> コマンドを中断。
interrupt Command
結局wait2は、実行されているので、そういう仕様なんだなと思いました。