2009-09-24 2 views
1

Я использую AS2, но я мог бы также сделать это в AS3.Flash: загрузка случайных фрагментов роликов в анимацию

Я делаю простую анимацию с примерно 10 «монетами» на экране. У меня есть клип, который оживляет другой клип. Я хочу вытащить случайный клип из библиотеки в вложенный клип, чтобы на каждом «флипе» появилась случайная монета.

Я поставил все имена клипов в массив (coin1, coin2, coin3 и др.)

Я думаю, что это будет описано как _root.coin_container.coin_animation.random_coin_here

Там будет 10 coin_container's на основной сцене, с внутренней вставкой coin_animation. В начале анимации случайный фрагмент ролика из массива должен быть вызван в coin_animation, затем coin_animation будет проходить через несколько кадров, повторять, вызывать другой случайный фрагмент ролика и повторять.

Кроме того, если бы я мог установить случайное время для анимации, чтобы приостановить так, что 10 анимаций перевернуты случайным образом, что было бы хорошо.

Я надеюсь, что это достаточно ясно. Спасибо!

+0

так что у вас есть до сих пор и что конкретно вы застряли? – JStriedl

ответ

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 из последнего кадра всех ваших анимационных монетах.

Что касается того, как вы хотите начать свою рандомизацию, которая зависит от вас. По умолчанию все они начнут играть самостоятельно, если вы не добавили действие остановки, поэтому в первый раз все они будут синхронизированы, но затем начнут шататься. Чтобы рандомизировать начало, вы должны положить стоп-действия в начале каждого, затем я буду проходить через контейнерный клип, рассказывая каждому ребенку, чтобы он начал играть после случайного количества секунд, как мы это делали выше.

0

A как2 пример. Вставьте это в кадр 1 пустого флеш-файла, создайте мувиклип под названием «монета» и через свойства задайте его идентификатор привязки к «монете». Вы можете адаптировать это для того, что вам нужно. Нет необходимости в нескольких кадрах ...

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(); на кадре 1, а на последнем фрейме - пустой пустой ключевой кадр, который имеет gotoAndPlay(2);

Смежные вопросы