Хотя цикл не работает в ActionScript 3.0 - PullRequest
1 голос
/ 15 ноября 2011

Я пытаюсь создать функцию (вызываемую событием при наведении курсора мыши), которая будет воспроизводить фильм в обратном направлении, когда указатель мыши находится над экземпляром, и останавливаться, пока его нет.

Это то, что я имею до сих пор:

var b2:rightButton = new rightButton(); //new instance
b2.X = 550; //instances position
addChild(b2); //add instance to stage
b2.alpha = .4; // set instances alpha
var num = 0; // new variable called 'num'
b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 

function rightScroll(event:MouseEvent) { //the function
    num = 1; //set num to 1
    b2.alpha = .8; //set alpha to 80%
}

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out

function no_rightScroll(event:MouseEvent){ //roll- out function
    num = 0; //set num back to 0
    b2.alpha = .4; //set alpha back to 40%
}

while (num == 1){ // while num =1 (while mouse is over)
    prevFrame(); //goto previous frame
}

Кто-нибудь знает, как это исправить, или лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Проблема с вашим кодом на данный момент заключается в том, что циклы не выполняются в соответствии с частотой кадров вашего фильма, поэтому ваш код будет вызывать prevFrame() много, много раз в одном кадре. Это может привести к бесконечным циклам, которые приведут к сбою вашей программы, и совершенно бесполезен с точки зрения анимации.

Лучший подход - слушать событие ENTER_FRAME вашего фильма и перемещать точку воспроизведения назад на один кадр каждый раз, когда событие отправляется. Добавляя и удаляя слушателя в действиях вашей кнопки, вы получите нужный эффект:

var b2:rightButton = new rightButton(); //new instance
b2.X = 550; //instances position
addChild(b2); //add instance to stage
b2.alpha = .4; // set instances alpha

b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 
function rightScroll(event:MouseEvent):void { //the function
    stage.addEventListener(Event.ENTER_FRAME,moveBackwards); //add stage listener
    b2.alpha = .8; //set alpha to 80%
}

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out
function no_rightScroll(event:MouseEvent):void { //roll- out function
    stage.removeEventListener(Event.ENTER_FRAME,moveBackwards); //remove stage listener
    b2.alpha = .4; //set alpha back to 40%
}

function moveBackwards(evt:Event):void {
    prevFrame();
}
2 голосов
/ 15 ноября 2011

Возможно, вам будет гораздо проще писать и читать, если вы используете библиотеку Greensock TweenLite.Tweenlite может анимировать кадры так же легко, как и другие числовые значения.

Внутри вашего прослушивателя событий попробуйте добавить следующее:

TweenLite.to( targetMC, 1, { frame:1, ease:fl.transitions.easing.None.easeNone } );

Он будет анимировать ваш мувиклип (в данном примере targetMC) к кадру 1линейно с продолжительностью 1 секунда.Вы можете поиграть с ним, используя любой из других параметров Tweenlite.

...