Поздравляем достижения своей цели.
Ваш код может быть улучшен с точки зрения удобочитаемости. У вас есть fl_AnimateVertically
в качестве описательного имени, но кроме этого трудно понять, что именно происходит. Я имею в виду, что он добавляет 3 к y, что, вероятно, приводит к движению, но нетрудно понять точное поведение.
Именно поэтому вы хотите использовать абстракцию или более подход сверху вниз, как это часто называют. То, что вы делаете в данный момент, - это добавление значения в координату, что в результате создает анимацию. Вы действительно хотите создать анимацию, не вдаваясь в подробности, что это на самом деле означает.
И, конечно же, люди создали анимацию с кодом раньше. Вот почему вы можете создать анимацию в абстрактном смысле: анимация - это изменение свойства объекта с течением времени. In the realm of flash an animation is called a tween and there's a class doing exactly that..
Давайте рассмотрим пример кода там:
var myTween:Tween = new Tween(myObject, "x", Elastic.easeOut, 0, 300, 3, true);
и применить его к вашей ситуации.
var verticalAnimation:Tween = new Tween(pruh, "y", Elastic.easeOut, pruh.y, stage.stageHeight, 3, true);
Вы должны отрегулировать продолжительность по своему вкусу. Надеюсь, вы увидите, как это легче читать и поддерживать, потому что вы указываете свойства анимации, такие как продолжительность. Вы также можете указать смягчение, что делает движение более интересным.
Хорошо, это только одна анимация, но вы хотите 3, правильно? Точнее, вы хотите повторить ту же самую анимацию, когда она закончится. И вы можете сделать именно это:
var animationCount:uint = 0;
var verticalAnimation:Tween = new Tween(pruh, "y", Elastic.easeOut, pruh.y, stage.stageHeight, 3, true);
verticalAnimation.addEventListener(TweenEvent.MOTION_FINISH, onMotionFinish); // wait for the animation to be finished
function onMotionFinish(e:TweenEvent):void
{
animationCount++; // add 1 to the counter
if(animationCount >= 3) // check how many times the animation finished so far
{
// if it was the last one, remove the listener
verticalAnimation.removeEventListener(TweenEvent.MOTION_FINISH, onMotionFinish);
}
else
{
// otherwise rewind and start again
verticalAnimation.rewind();
verticalAnimation.start();
}
}
Есть другие библиотеки, чем это встроенный в Tween
класса, которые гораздо более мощным. The one from greensock is very popular and easy to use вы можете find the documentation for the flash version here