【问题标题】:Flash : Load random movie clips into animationFlash : 将随机影片剪辑加载到动画中
【发布时间】:2010-12-01 06:00:31
【问题描述】:

我使用的是 AS2,但我也可以在 AS3 中使用。

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

我已将所有剪辑名称放入一个数组中(coin1、coin2、coin3 等)

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

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

另外,如果我可以为动画设置一个随机暂停时间,这样 10 个动画就会随机翻转,那就太好了。

我希望这已经足够清楚了。 谢谢!

【问题讨论】:

  • 那么到目前为止你有什么,你特别坚持什么?

标签: flash actionscript-3 actionscript


【解决方案1】:

一个 as2 的例子。将其粘贴到空 Flash 文件的第 1 帧中,创建一个名为“coin”的影片剪辑,并通过属性将其链接标识符设置为“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();
}

您需要正确创建硬币影片剪辑。你应该在第一帧有一个stop();,在最后一帧有一个空白的空关键帧,它有gotoAndPlay(2);

【讨论】:

    【解决方案2】:

    这些天我在使用 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。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-13
      • 2017-11-12
      • 2016-07-02
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多