Пауза между строками ActionScript - PullRequest
3 голосов
/ 10 июня 2009

Вот что я хочу сделать в коде. Анимация MC автомобиля в течение х секунд. После того, как автомобиль сделан, двигайте MC собаки на y секунд. И так далее ...

С этим кодом все анимации выполняются одновременно.

car.slideTo(200,100,1);
dog.slideTo(200,100,5);
blimp.slideTo(200,100,2);

...

Можно ли написать функцию паузы для вставки между этими строками? Я пытался использовать getTimeout, но я хочу избежать необходимости определять каждую анимацию как отдельную функцию.

Ответы [ 5 ]

4 голосов
/ 19 декабря 2011

К сожалению, в настоящее время нет способа сделать это. ActionScript - это однопоточный язык, и он не поддерживает использование таймеров без обратного вызова. Однако эта функция, безусловно, возможна (через систему потоков, называемую подпрограммами) и может быть добавлена ​​в будущем выпуске языка.

Но сейчас мы застряли с setTimeout ().

3 голосов
/ 10 июня 2009

Вы можете попробовать использовать setInterval (my_func, 1000), который вызывает my_func через 1 секунду.

2 голосов
/ 10 июня 2009

Возможно, вы захотите использовать SetInterval () .

Вот простой пример, который может помочь:

var Timer = setInterval(delay, 500); //calls the function delay after 500 milliseconds

function delay () {
    trace("delayed!");
    clearInterval(Timer); //stops the function from being called again
}
1 голос
/ 10 июня 2009

Я настоятельно советую вам использовать TweenMax http://blog.greensock.com/tweenmaxas3/

Он имеет все функции анимации анимации, о которых вы можете мечтать, включая паузу в середине кода.

Он также очень прост в использовании, например,

import gs.TweenMax;
// move the movieclip to (500,200) in 2 seconds:
var myTween:TweenMax = new TweenMax(mc, 2, {x:500, y:200});

и вы можете сделать паузу в любое время, как

myTween.pause();

Но в вашем случае вы, вероятно, хотите поставить в очередь своих подростков

Так что вы можете написать как

import gs.*;

var tween1:TweenMax = new TweenMax(mc1, 1, {x:300,y:400});
var tween2:TweenMax = new TweenMax(mc2, 1, {x:200,y:400});
var tween3:TweenMax = new TweenMax(mc3, 1, {x:100,y:400});

var myGroup:TweenGroup = new TweenGroup([tween1, tween2, tween3]);
myGroup.align = TweenGroup.ALIGN_SEQUENCE;

Кроме того, TweenMax и Tweensy в настоящее время являются самыми быстрыми библиотеками анимации, существовавшими в AS3, но, на мой взгляд, TweenMax немного проще в использовании, сравнение между различными механизмами анимации здесь http://blog.greensock.com/tweening-speed-test/

0 голосов
/ 11 июня 2009

Ваш вопрос в большей или меньшей степени отражает неправильное понимание того, как работает ActionScript. Когда Flash выполняет ваше содержимое, то, что он делает: сначала он запускает все ваши сценарии кадров, затем он продвигает ваши анимации на один кадр, а затем обновляет экран. Затем он запускает все сценарии в следующем кадре, затем снова продвигает анимацию и обновляет экраны.

Так что, если вы поместите какую-то функцию паузы между двумя строками кода, Flash ничего не сделает во время паузы, потому что он все еще пытается завершить этот набор сценариев кадров. Затем, когда паузы были закончены, , затем Flash наконец обновит экран, поэтому все три анимации будут работать одновременно.

Это может показаться болью, но getTimeout - это то, что вы должны использовать. Или вы также можете использовать библиотеку анимации, которая включает функцию для отсрочки начала анимации, например, представленную в ответе Unreality. Под ним то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...