1

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();
4

1 に答える 1

5

ここでスコープが完全にねじ込まれています。

スコープの基本:

  • 関数またはループ内で宣言されたオブジェクトまたは関数は、その関数またはループ内からのみアクセスできます。
  • 「private」以外のアクセス修飾子が使用されていない限り、クラスで宣言されたオブジェクトまたは関数についても同じことが言えます。
  • ループで宣言されたオブジェクトは、ループのその反復内でのみアクセスできます。したがって、反復1で宣言されたオブジェクトは、反復2〜100ではアクセスできなくなります。

したがって、これらのルールを使用すると、コード内の1つの問題を指摘できます。ループ内で関数を宣言し、そのループの外側から関数にアクセスしようとしています。これらのイベントリスナーをアタッチする場合、これらの関数は技術的には存在しません。

次に、2番目の問題について説明します。そのループで一連の関数を100回宣言しています(これは、記録としては巨大なメモリの問題です)。関数の宣言は関数を実行していません。したがって、これらの関数を作成しますが、実際に実行されることはありません。そのため、期待どおりに機能しません。

これらの関数を100回実行する場合は、グローバルスペースでループの外側で関数を宣言してから、ループ内で関数を呼び出す必要があります。ただし、これらの関数では(TweenLiteを介して)Tweenを使用しています。ループは1秒未満で実行されます。したがって、100回呼び出すと、実際に1つのトゥイーンが表示されるだけなので、まったく何も起こりません。

スコープ、ループ、トゥイーンがどのように機能するかについて、実際に調査する必要があります。あなたが提供したコードは、現時点では信じられないほど混乱しています。

于 2013-01-31T05:15:27.640 に答える