1

順番に実行したい一連のアニメーションがあるとしましょう。このようにすると、必要以上にメモリを消費する巨大なコール スタックが作成されますか?

function ch1():void {
    var someVar:uint;
    function doThis();
    ...
    ...
    ch2();
}
function ch2():void {
    var someOtherVar:String;
    function doThat();
    ...
    ...
    ch3();
}
function ch3():void {
    var evenMoreVar:Number;
    function doMore();
    ...
    ...
    ch4();
}

巨大なコール スタックを避けるために、このような方法で次の関数を呼び出した方が良いでしょうか?

function ch1():void {
    addEventListener("ch1_end",ch2);
    var someVar:uint;
    function doThis();
    ...
    ...
    dispatchEvent(new Event("ch1_end"));
}
4

2 に答える 2

2

イベントを使用することは、あなたのようなシーケンスを処理するためのより良い方法ですが、いくつかの単純なケースでは、各呼び出しを少し遅らせるだけで、同時に実行されず、swf がフリーズすることを確実に防ぐことができます。単純なものを使用してみてください。気に入らsetTimeoutない場合は、質問で説明したようにイベントを使用してみてください。

var nextCallDelay:Number = 20; // in milliseconds, change it to fit your needs

function ch1():void {
    var someVar:uint;
    function doThis();
    ...
    ...
    setTimeout(ch2, nextCallDelay);
}
function ch2():void {
    var someOtherVar:String;
    function doThat();
    ...
    ...
    setTimeout(ch3, nextCallDelay);
}
function ch3():void {
    var evenMoreVar:Number;
    function doMore();
    ...
    ...
    setTimeout(ch4, nextCallDelay);
}
于 2013-10-22T23:46:19.273 に答える
0

相互接続された関数の巨大なスタックを持たないように、代わりに何かを返すのはどうですか?

function ch1():void {
   return true
}

 function ch2():void {
   return true
}

function myAnim(){
      var ani1 = ch1();
      var ani2 = ch2();
}
于 2013-10-22T20:06:23.880 に答える