AS3循环不起作用

时间:2013-01-31 01:57:20

标签: actionscript-3 loops while-loop

我希望在第3个计时器之后创建一个循环,直到程序结束,然后返回第3个计时器,但程序在最后一个计时器后停止。 我也试过“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();

1 个答案:

答案 0 :(得分:5)

你的范围完全搞砸了。

范围基础:

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

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

现在你的第二个问题。您在该循环中声明了一系列函数100次(这是一个GIGANTIC内存问题,用于记录)。声明函数未运行函数。所以你创建了这些函数,但它们实际上从未运行过,这就是为什么它不能按照你期望的方式工作。

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

您确实需要对范围,循环和补间如何工作进行一些研究。你提供的代码目前是一个令人难以置信的混乱。