AS3:按顺序调用函数而不创建巨大的调用堆栈

时间:2013-10-22 18:17:05

标签: actionscript-3 optimization callstack

假设我有一系列想要按顺序执行的动画。如果我这样做,我是否创建了一个巨大的调用堆栈,占用的内存超过了必要的数量?

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"));
}

2 个答案:

答案 0 :(得分:2)

使用事件是处理像你这样的序列的更好方法,但在一些简单的情况下,你可以稍微延迟每次调用,这样你就可以确定它们不会在同一时间运行并导致你的瑞士法郎冻结,试着使用像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);
}

答案 1 :(得分:0)

你怎么回事,所以你没有那么大的互联功能?

function ch1():void {
   return true
}

 function ch2():void {
   return true
}

function myAnim(){
      var ani1 = ch1();
      var ani2 = ch2();
}