私は4つの画像がランダムな順序でアニメーション化される「スライドショー」を作成しています。
たとえば、1つの画像に複数のアニメーションが連続して3回表示されるのを防ぐために、少しロジックを作成しました。
私の問題:4つの画像すべてがアニメーション化された後(クエリ「配列」が2回目にクリアされた後)、タイマーが狂ってtrace()
、画像をアニメーション化せずに高いシーケンスレートで乱数が表示されます不気味だと思います。
私のコード:
var myTimer:Timer = new Timer(2500);
myTimer.addEventListener(TimerEvent.TIMER, animate);
myTimer.start();
var array:Array = new Array();
var lastNum:int;
function animate(e:TimerEvent):void {
var num:int = getRandomNumber( 1, 4 );
trace( num );
if( array.indexOf( num ) < 0 && num != lastNum ) {
myTimer.delay = 2500;
if( num == 1 ) {
sideImg_start_1.play(); // comment this*
} else if( num == 2 ) {
sideImg_start_2.play(); // comment this*
} else if( num == 3 ) {
sideImg_start_3.play(); // comment this*
} else if( num == 4 ) {
sideImg_start_4.play(); // comment this*
}
array.push( num );
if( array.length == 4 ) {
array.splice(0, 4);
trace(" array cleared - " + array.length);
lastNum = num;
}
} else {
myTimer.delay = 100; // I've also tryed so make a higher delay
// like 500 but its the same problem...
}
}
function getRandomNumber( min:int, max:int ):int {
return Math.floor( Math.random() * ( 1 + max - min ) ) + min;
}
stop();
だからみんな、あなたのすべての答えとあなたの助けに感謝します:D
アップデート:
最初に、タイマーに高速を定義する代わりに、単に「animate()」関数を呼び出して、時間を失うことなく次の番号を高速に呼び出すことを試みました。これにより、ランダムなアニメーションが奇妙に見えます。
animate(null);
以前の代わりに使用しましmyTimer.delay = 100;
たが、STACKOVERFLOWエラーが発生していました:P