Зацикливать анимацию до тех пор, пока не будет нажата кнопка, но дайте анимации завершиться

Ну, я знаю, что я должен сделать, просто не знаю, как.

Я знаю, что должен (после создания всех моих анимаций и прочего) объявить все переменные в кадре 1 (в отдельной временной шкале), например a=0;b=0...

Затем выполните gotoandplay в конце цикла с условием (в кадре 120, если a=0 gotoandplay (100) иначе gotoandplay(15)

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

Любые указатели? Спасибо


person Hélder Filipe Correia Carneiro    schedule 04.03.2018    source источник
comment
Не уверен, что понял проблему, но у вас может быть другая переменная, такая как buttonClicked:Boolean, для которой вы устанавливаете значение true, когда пользователь нажимает кнопку, и также добавляете ее в условие цикла, чтобы она продолжала цикл, только если buttonClicked == false   -  person kaarto    schedule 04.03.2018
comment
Таким образом, вместо целочисленных переменных a, b, c, d я бы использовал buttoncli ked1, buttonclicked2 и т. д. в первом кадре, установив их как false, затем все то же самое и только изменив условное выражение, чтобы продолжать цикл, если кнопка все еще не щелкнут, как только он щелкнет, он завершит цикл, проверит условное выражение и сделает что-то еще, верно? Я мог бы отредактировать сообщение позже, чтобы добавить ссылочный код   -  person Hélder Filipe Correia Carneiro    schedule 04.03.2018


Ответы (2)


Предположим, что ваша кнопка имеет имя экземпляра btn, а зацикленная анимация имеет имя экземпляра mc_loop.

Вы можете сделать что-то вроде этого:

//listen for the mouse click on your button
btn.addEventListener(MouseEvent.CLICK, buttonClicked, false, 0, true);

//run this function on the click
function buttonClicked(e:Event):void {
    //add a script to the last frame that calls this inline function
    //the addFrameScript method wants a 0 based frame number, so the first frame would be 0,  the last frame would the total frame count less 1
    mc_loop.addFrameScript(mc_loop.totalFrames-1, function(){
        mc_loop.stop(); //stop the clip so it doesn't loop anymore
        mc_loop.addFrameScript(mc_loop.totalFrames-1, null); //remove the frame script so it doesn't run again should mc_loop reach the last frame again
    });
}

С этим кодом, предполагая, что mc_loop уже воспроизводится/зацикливается, щелчок по btn остановит его, как только он достигнет своего последнего кадра.

person BadFeelingAboutThis    schedule 05.03.2018
comment
Итак, я принял оба ваших предложения и сделал одну анимацию с кругом, идущим влево и вправо, и кнопкой. 3 слоя: Действия - person Hélder Filipe Correia Carneiro; 05.03.2018

Итак, я принял оба ваших предложения и сделал это

1 анимация с кругом, идущим влево и вправо, и кнопкой, идущей от кадров 1-20, и текстом с надписью «Готово» один слой 21

3 слоя: слой кнопок действий 1 (слой анимации)

После этого я установил на кадре действия 1 код

var loop:Boolean =true

И на 20 кадре

if (loop==true){
        gotoAndPlay(2);
}else {
gotoAndStop(21)
}

Потом на кнопке сделал

btn.addEventListener(MouseEvent.CLICK, buttonClicked, false, 0, true);
function buttonClicked(e:Event):void {
    loop=false
    }

И это сработало. цикл заканчивается и только потом он переходит на 21-й кадр, и там останавливается.

Я что-то упускаю? или это хорошее решение? (также можно использовать это для меню с регистром вместо if и целыми значениями, чтобы перейти к нужной главе)

person Hélder Filipe Correia Carneiro    schedule 05.03.2018