2015-04-29 2 views
1

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

var pocet:Number = 0; 

pruh.addEventListener(Event.ENTER_FRAME, fl_AnimateVertically); 

function fl_AnimateVertically(event:Event) 
{ 
if (pruh.y >= stage.stageHeight) { 
    pocet++; 
} 
if (pruh.y < stage.stageHeight) { 
pruh.y += 3; 
} 
else { 
    pruh.y = 0 - pruh.y; 
} 
if (pocet == 3) { 
    pruh.removeEventListener(Event.ENTER_FRAME, fl_AnimateVertically); 
} 
} 

Thanx

ответ

1

Поздравляем достижения своей цели.

Ваш код может быть улучшен с точки зрения удобочитаемости. У вас есть 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

0

Попробуйте это

var pocet:Number = 0; 
 

 
pruh.addEventListener(Event.ENTER_FRAME, fl_AnimateVertically); 
 
var startY:int=pruh.y; 
 
function fl_AnimateVertically(event:Event) 
 
{ 
 
if (pruh.y >= stage.stageHeight) { 
 
    pocet++; 
 
\t pruh.y=startY; 
 
} 
 
if (pruh.y < stage.stageHeight) { 
 
pruh.y += 3; 
 
} 
 
else { 
 
    pruh.y = 0 - pruh.y; 
 
} 
 
if (pocet ==3) { 
 
    pruh.removeEventListener(Event.ENTER_FRAME, fl_AnimateVertically); 
 
\t 
 
trace("done"); 
 
} 
 
}

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