1

私は正常に動作するこのコードを作成しました-私の問題は、最後に最初からやり直したいということです。

これを作成し始めたとき、.swf ムービーが終了時にループすることを意図していましたが、そうはなりませんでした。次に、タイマーと文字列をリセットするコード自体に一種の「再起動」機能を作成しようと考えました.

最初に、変数 i をリセットしようとしました。次に、タイマー eventListeners を削除しようとしました。しかし、成功はありません。

このコードを最初からやり直すための最善の方法は何でしょうか?

import flash.utils.Timer;
import flash.events.TimerEvent;
import com.greensock.*;
import com.greensock.easing.*;

var str_one:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... ';
var i:uint = 0;
var timer_one:Timer = new Timer(50);
timer_one.start();
timer_one.addEventListener(TimerEvent.TIMER, goTime);

var str_two:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... Fra 2. april bliver du mødt af en helt ny avis, med det bedste fra den gamle, tilsat en masse nyt.';
var timer_two:Timer = new Timer(50);
timer_two.addEventListener(TimerEvent.TIMER, goTime_two);

var str_three:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... Fra 2. april bliver du mødt af en helt ny avis, med det bedste fra den gamle, tilsat en masse nyt.Sådan vil vi skabe en endnu bedre avis til dig, der er på farten. Glæd dig – det gør vi!';
var timer_three:Timer = new Timer(50);
timer_three.addEventListener(TimerEvent.TIMER, goTime_three);

function goTime(e:TimerEvent) {
    tekstbox1_txt.appendText(str_one.charAt(i));
    i++;
    if (i>=str_one.length) {
        timer_one.stop();
        TweenLite.to(hand, 1, {y:175, onComplete:ripwhite});
        }
    }

function ripwhite():void {
    TweenLite.to(hand, 1, {y:405});
    TweenLite.to(white_mask, 1, {y:320, onComplete:fadetekst1ud});
}

function fadetekst1ud():void {
    TweenLite.to(tekstbox1_txt, 1, {alpha:0, onComplete:tekstnr2});
    }

function tekstnr2():void {
timer_two.start();
}

function goTime_two(e:TimerEvent) {
    tekstbox2_txt.appendText(str_two.charAt(i));
    i++;
    if (i>=str_two.length) {
        timer_two.stop();
        TweenLite.to(tekstbox2_txt, 1, {alpha:1, onComplete:forsinkelse});
        }
    }

function forsinkelse():void {
    TweenLite.to(tekstbox2_txt, 1, {alpha:0, onComplete:tekstnr3});
    }

function tekstnr3():void {
timer_three.start();
}

function goTime_three(e:TimerEvent) {
    tekstbox3_txt.appendText(str_three.charAt(i));
    i++;
    if (i>=str_three.length) {
        timer_three.stop();
        TweenLite.to(tekstbox3_txt, 1, {alpha:1, onComplete:sidstefunktion});
        }
    }

function sidstefunktion():void {
    TweenLite.to(tekstbox3_txt, 1, {alpha:0});
    TweenLite.to(rippedpic, 1, {alpha:0});
    }

編集:

リセット関数を設定してから、次のように最初の関数にループバックする場合:

function nulstil():void {
    i = 0;
    TweenLite.killTweensOf(hand);
    TweenLite.killTweensOf(tekstbox1_txt);
    TweenLite.killTweensOf(tekstbox2_txt);
    TweenLite.killTweensOf(tekstbox3_txt);
    timer_one.addEventListener(TimerEvent.TIMER, goTime);
    timer_two.addEventListener(TimerEvent.TIMER, goTime_two);
    timer_two.addEventListener(TimerEvent.TIMER, goTime_three);
    TweenLite.to(white_mask, 0.1, {onComplete:goTimeAgain});
    }

出力に次のように表示されます。

ArgumentError: エラー #1063: Untitled_fla::MainTimeline/goTimeAgain() で引数の数が一致しません。Function/ http://adobe.com/AS3/2006/builtin::apply() で com.greensock.core::TweenCore/complete() で com.greensock::TweenLite/renderTime( ) com.greensock.core::SimpleTimeline/renderTime() で com.greensock::TweenLite$/updateAll() で

4

1 に答える 1

2

TimelineMax を使用することをコメントで提案しました。これがうまくいくと思う完全なコードです。offsetの引数を使用する場所と使用しない場所に注意してくださいappendresetEverythingすべてのビジュアル要素を適切な開始位置、アルファなどに設定するには、関数に入力する必要があります。

基本的にこれがどのように機能するか: を使用する代わりに、TimelineMaxTimersの機能を使用します。addCallbackコールバックはタイムラインで「長さ」が 0 であるため、コールバックをアタッチするとき、およびコールバックの各バッチの後に最初のトゥイーンを追加するときに、再生ヘッドを手動で進める必要があります (ここでオフセット引数を使用します)。ただし、トゥイーンには長さがあるため、その後の への呼び出しはappend、その時点まで構築されたタイムラインの最後にトゥイーンを自動的に揃えます。

TimelineMax のコンストラクターで を指定repeat : -1しました。これにより、タイムラインが永久にループします。最後にresetEverything、タイムラインが再起動するたびにすべての要素が正しい開始位置にあることが保証されるように、最初にコールバックを追加しました。残りは完全に自動で、タイムラインによって処理されます。

import com.greensock.*;

var str_one:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... ';
var str_two:String = 'Fra 2. april bliver du mødt af en helt ny avis, med det bedste fra den gamle, tilsat en masse nyt.';
var str_three:String = 'Sådan vil vi skabe en endnu bedre avis til dig, der er på farten. Glæd dig – det gør vi!';

//-------- HELPER FUNCTIONS ---------//

// Set everything to start positions
function resetEverything():void {
    // Set alphas, positions, etc. 
    hand.x = <start x>;
    hand.y = <start y>;
    //
}

// Quick reusable callback
function addText(textBox:TextField, text:String):void { textBox.appendText(text); }

//-------- BUILD THE TIMELINE ---------//
var timeline:TimelineMax = new TimelineMax({repeat : -1}); //repeat = -1 --> loop forever
timeline.pause();
timeline.addCallback(resetEverything, 0);

var lng:uint = str_one.length;
var playHead:Number = 0.05;
for(var i:uint = 0; i < lng; i++) {
    timeline.addCallback(addText, playHead, [tekstbox1_txt, str_one.charAt(i)]);
    playHead += 0.05;
}
timeline.append(new TweenLite(hand, 1, {y:175}), lng * 0.05);  // !!Note the offset argument here!!
timeline.append(new TweenLite(hand, 1, {y:405}));
timeline.append(new TweenLite(white_mask, 1, {y:320}));
timeline.append(new TweenLite(tekstbox1_txt, 1, {alpha:0}));

playHead += 4;
lng = str_two.length;
for(i = 0; i < lng; i++) {
    timeline.addCallback(addText, playHead, [tekstbox2_txt, str_two.charAt(i)]);
    playHead += 0.05;
}
timeline.append(new TweenLite(tekstbox2_txt, 1, {alpha:1}), lng * 0.05); // !!Note the offset argument here!!
timeline.append(new TweenLite(tekstbox2_txt, 1, {alpha:0}));

playHead += 2;
lng = str_three.length;
for(i = 0; i < lng; i++) {
    timeline.addCallback(addText, playHead, [tekstbox3_txt, str_three.charAt(i)]);
    playHead += 0.05;
}
timeline.append(new TweenLite(tekstbox3_txt, 1, {alpha:1}), lng * 0.05); // !!Note the offset argument here!!
timeline.append(new TweenLite(tekstbox3_txt, 1, {alpha:0});
timeline.append(new TweenLite(rippedpic, 1, {alpha:0});

timeline.play();
于 2013-03-18T14:10:43.280 に答える