0

我一直在制作一个“幻灯片”,其中 4 个图像以随机顺序进行动画处理。

为了防止一个图像连续出现多个动画,例如连续 3 次,我写了一些逻辑。

我的问题:在所有 4 个图像都被动画化了几次之后(在我认为第二次清除查询“数组”之后),计时器变得疯狂,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

4

1 回答 1

1

例如,如果您lastNum等于 4,并且您有 1,2 和 3 作为新值,那么您最终会出现无限循环,

因为你不能插入 4 (因为它等于lastNum)并且你不能插入 1,2 或 3 因为它们已经在数组中。

你需要做的是:

if (array.length == 4) {
    array.splice(0, 4);
    lastNum = num;
} else {
    lastNum = 0; //<-- HERE
}
于 2012-09-26T00:10:20.687 回答