Flash:将随机影片剪辑加载到动画中

时间:2009-09-24 21:34:49

标签: flash actionscript-3 actionscript

我正在使用AS2,但我也可以在AS3中使用它。

我正在制作一个简单的动画,屏幕上有大约10个“硬币”。我有一个电影剪辑,动画另一个影片剪辑翻转。我想将一个随机的影片剪辑从库中拉到嵌套的剪辑中,这样每次“翻转”就会出现一个随机的硬币面。

我已将所有剪辑名称放入数组(coin1,coin2,coin3等)

我认为它会被描述为_root.coin_container.coin_animation.random_coin_here

主舞台上将有10个coin_container,其中coin_animation嵌套在里面。在动画开始时,应该将数组中的随机影片剪辑调用为coin_animation,然后coin_animation将运行几帧,重复,调用另一个随机影片剪辑并重复。

此外,如果我可以设置动画的随机时间暂停,那么10个动画会随机翻转,这样会很好。

我希望这很清楚。 谢谢!

2 个答案:

答案 0 :(得分:0)

这些天我和AS3合作,这就是我要给出的解释。

有很多方法可以解决这个问题。您可以使用Tweening引擎,例如我最喜欢的Tweenlite之一,并使用其onComplete参数,或者您只需创建一个创建计时器并设置随机等待的函数,然后在等待完成后,您的动画火灾;一旦您的动画触发,它将调度一个事件,该事件正在您的每个硬币动画片段动画上进行监听。

mc1.addEventListener(Event.COMPLTE, _onComplete);

private function _onComplete(e:Event):void
{
    var target:MovieClip = e.target;
    var timer:Timer = new Timer(Math.random() *  5 + 5, 1); //Returns a number between 5 and 10
    timer.addEventListener(TimerEvent.TIMER, onTimer);
    timer.start();
    function onTimer(e:TimerEvent):void
    {
        target.play();
    }
}

现在我们所要做的就是从所有硬币动画的最后一帧发送Event.COMPLETE。

至于你想如何开始你的随机化。默认情况下,除非您添加了停止操作,否则它们都将自行开始播放,因此第一次它们将全部同步,但随后将开始交错。要在开始时随机化,你必须在每个开始时设置停止动作,然后我将遍历容器剪辑,告诉每个孩子在随机秒数后开始播放,如上所述。

答案 1 :(得分:0)

as2示例。将其粘贴到空flash文件的第1帧中,创建一个名为“coin”的movieclip,并通过属性将其链接标识符设置为“coin”。您可以根据需要调整它。不需要几个框架......

var numCoins:Number = 10;
var coins:Array = new Array();
var offset:Number = 500;

//add coins to the stage
addCoinsToStage(this);

//shuffle the order
fisherYatesShuffle(coins);

//play them one by one with a random offset
playMovies(coins, offset);

function addCoinsToStage(obj:Object):Void{
    for(var i:Number = 0; i < numCoins; i++){
        obj.attachMovie("coin", "coin"+i, obj.getNextHighestDepth());
        coins.push(obj["coin"+i]);
        //position on stage
        coins[i]._x = Math.random() * Stage.width;
        coins[i]._y = Math.random() * Stage.height;
    }
}


function fisherYatesShuffle(arr:Array):Void{
    for(var i:Number = arr.length - 1; i > 1; i--){
        var j = Math.round(Math.random() * i);
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }   
}

function playMovies(arr:Array, delay:Number){   
    for(var i:Number = 0; i < arr.length; i++){
        var d = i * delay;
        trace(d);
        setTimeout(playMovie, d, arr[i]);
    }
}

function playMovie(movie:MovieClip){
    movie.play();
}

您需要正确创建硬币动画片段。您应该在第1帧和最后一帧上有stop();一个空白的空关键帧gotoAndPlay(2);