1

我想在第三个计时器之后创建一个循环,直到程序结束,然后在第三个计时器处返回,但程序在最后一个计时器之后停止。我也尝试了“for”功能,但没有成功。

这是我的代码:

var i:Number = 0;

disco.visible = false;
palouki.visible = false;
konto.visible = false;
runner.visible = false;
mtext.visible = false;
container.visible = false;
atfa.visible = false;


var playert1: Timer = new Timer(1000, 1);
var playert2: Timer = new Timer(1500, 1);
var playert3: Timer = new Timer(2000, 1);
var playert4: Timer = new Timer(2500, 1);
var playert5: Timer = new Timer(3000, 1);
var playert6: Timer = new Timer(3500, 1);
var playert7: Timer = new Timer(5000, 1);


playert1.addEventListener(TimerEvent.TIMER, timert1F);
playert2.addEventListener(TimerEvent.TIMER, timert2F);
playert3.addEventListener(TimerEvent.TIMER, timert3F);
playert4.addEventListener(TimerEvent.TIMER, timert4F);
playert5.addEventListener(TimerEvent.TIMER, timert5F);
playert6.addEventListener(TimerEvent.TIMER, timert6F);
playert7.addEventListener(TimerEvent.TIMER, timert7F);

playert1.start();
playert2.start();
playert3.start();
playert4.start();
playert5.start();
playert6.start();
playert7.start();


function timert1F(e:TimerEvent):void{
    mtext.visible = true;
    TweenLite.from(mtext, 0.5, {alpha:0});

}

function timert2F(e:TimerEvent):void{
    container.visible = true;
    TweenLite.from(container, 0.5, {alpha:0});
}

while (i<100){

    function timert3F(e:TimerEvent):void{
        disco.visible = true;
        TweenLite.from(disco, 0.5, {alpha:0});
    }

    function timert4F(e:TimerEvent):void{
        runner.visible = true;
        TweenLite.from(runner, 0.5, {alpha:0});
    }
    function timert5F(e:TimerEvent):void{
        palouki.visible = true;
        TweenLite.from(palouki, 0.5, {alpha:0});
    }
    function timert6F(e:TimerEvent):void{
        konto.visible = true;
        TweenLite.from(konto, 0.5, {alpha:0});
    }

    function timert7F(e:TimerEvent):void{
        atfa.visible = true;
        TweenLite.from(atfa, 0.5, {alpha:0});
    }

trace(i);
i++;
}
stop();
4

1 回答 1

5

你的范围在这里完全搞砸了。

范围基础:

  • 在函数或循环内声明的任何对象或函数只能从该函数或循环内访问
  • 对于在类中声明的对象或函数也是如此,除非使用“private”以外的访问修饰符
  • 在循环中声明的任何对象只能在循环的该迭代中访问。因此,在迭代 1 中声明的对象将永远无法在迭代 2-100 中访问。

因此,通过这些规则,我们可以指出您代码中的一个问题:您在循环中声明了一个函数,并试图从该循环外部访问它。当您附加这些事件侦听器时,这些功能在技术上并不存在。

现在到你的第二个问题。您在该循环中声明了一系列函数 100 次(这是一个巨大的内存问题,为了记录)。声明函数不是运行函数。因此,您创建了这些函数,但它们从未真正运行,这就是为什么这不能按照您期望的方式工作。

如果希望这些函数运行 100 次,则需要在全局空间中声明循环外的函数,然后调用循环内的函数。但是您在这些函数中使用了 Tween(通过 TweenLite)。您的循环将在不到一秒的时间内运行。所以调用它 100 次绝对不会做任何事情,因为它只会导致一个补间实际出现。

您确实需要对范围、循环和补间如何工作进行一些研究。您提供的代码目前是一团糟。

于 2013-01-31T05:15:27.640 回答