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 回答