来自数组的AS3随机动画片段无重复(包括定时器)

时间:2014-06-23 21:50:19

标签: arrays actionscript-3 random timer

我不知道如何在10-20秒之后从阵列中一次绘制一个动画片段。有五种不同的动画片段,所以没有一个动画片段是相同的。移除绘制的动画片段时,计时器需要重置,然后需要在10-20秒后从阵列中拉出另一个动画片段。绘制的movieclip可能不会再次使用,因此当从舞台中删除时,应将其从数组中删除。这些脚本位于单独的.as文件中。

这段代码已经有了计时器(归功于Kevin McGowan

import flash.utils.setTimeout;

// Your Sprite / MovieClip
var clip:MovieClip;
// The time until you want to add the first one
var timeToAdd:uint = Math.random() * 20;
// This will be the timer
var _timer:uint;

// This will add us to the stage after the random time. Second variable is seconds, so we need to multiply by 1000.
_timer = setTimeout(addToStage, timeToAdd * 1000);

// Called when the timer expires
function addToStage():void{
    clip = new MovieClip();
    // You would need logic to decide when to remove it, but once it is removed this will fire
    clip.addEventListener(Event.REMOVED_FROM_STAGE, onRemove);
}

// Called once removed
function onRemove(e:Event):void{
    // Remove the event listener
    clip.removeEventListener(Event.REMOVED_FROM_STAGE, onRemove);
    // Restart the timer
    timeToAdd = Math.random() * 20;
    _timer = setTimeout(addToStage, timeToAdd * 1000);
}

我希望你们能帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

你可能想要先创建一个Mcs数组......

//Add 5 MCs to array
var mcArr:Array = [];
for(var i:int = 0; i<5; i++) {
    mcArr.push(new MovieClip());
}

您可以使用Array.pop()从数组中删除最后一个元素并返回该元素的值。 如果需要Array中的第一个元素,请使用Array.shift()。 将addToStage函数更改为:

function addToStage():void
{
    clip = mcArr.pop();
    //clip will be null after the fifth MC. Check that clip is not null before trying to add listener
    if(clip)
        clip.addEventListener(Event.REMOVED_FROM_STAGE, onRemove);
}