Обратный отсчет "gotoAndPlay" AS3 - PullRequest
0 голосов
/ 25 февраля 2010

Мой таймер отсчитывает время от 60 до нуля . Я хочу, чтобы мой фильм перешел к следующему кадру с нулевым счетом . Как бы я сделал условие, чтобы перейти от кадр 1-2 ? Мне нужно найти правильный оператор и значения, но я теряюсь в строках.

ЧТО Я ПЫТАЮСЬ
If (что-то <> == true false);
gotoAndPlay (2);

stop();
//
var timer:Timer = new Timer(100, 300);
timer.addEventListener(TimerEvent.TIMER, countdown);
timer.start();
function countdown(event:TimerEvent) {
    var totalSecondsLeft:Number = 60 - timer.currentCount;
    myText.text = timeFormat(totalSecondsLeft);
}

function timeFormat(seconds:int):String {
  //  var minutes:int;
   // var sMinutes:String;
    var sSeconds:String;
    if(seconds > 59) {
    //    minutes = Math.floor(seconds / 60);
    //    sMinutes = String(minutes);
        sSeconds = String(seconds % 60);
    } else {
   //     sMinutes = "";
        sSeconds = String(seconds);
    }
    if(sSeconds.length == 1) {
        sSeconds = "0" + sSeconds;

            //###################################
            //}
            //if(bla bla bla?) {
            //gotoAndPlay(2);
            //###################################
    }
    return sSeconds;//return sMinutes + ":" + sSeconds;
}

Я попробовал это "Ничего"

stop();
var timer:Timer = new Timer(1000); // delay = time between ticks in milliseconds
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
timer.start();

function onTimer($evt:TimerEvent):void { 
    watch.hand.rotation = 30 + timer.currentCount;//tick 5 
} 

//function startAgain($evt:TimerEvent):void { 
//timer.reset(); 
//timer.start(); 
//} 

function onTimerComplete(e:TimerEvent):void
{

    // remove listener
    timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
    // advance playhead to frame 2
    gotoAndPlay(2);
}

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

альтернативный текст http://www.ashcraftband.com/myspace/videodnd/board1.jpg

Ответы [ 3 ]

0 голосов
/ 27 февраля 2010

В качестве альтернативы вы можете использовать функцию setTimeout:

function goToTwo(e) {
   gotoAndPlay(2);
}

setTimeout(goToTwo, 60*1000);
0 голосов
/ 27 февраля 2010

Вы говорите, что хотите перейти к следующему кадру . Я не совсем уверен, что вы ищете, но это функция nextFrame ()? или gotoAndStop ()?

Можете ли вы попытаться объяснить, что именно здесь произошло?

0 голосов
/ 25 февраля 2010

Если ваш вопрос касается продвижения точки воспроизведения от кадра 1 к кадру 2 после 60 тактов, я бы посоветовал вам прослушать событие TimerEvent.TIMER_COMPLETE. Например,

var timer:Timer = new Timer(delay, 60); // delay = time between ticks in milliseconds
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
timer.start();

function onTimerComplete(e:TimerEvent):void
{
    // remove listener
    timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

    // advance playhead to frame 2
    gotoAndPlay(2);
}

Что касается вашего вопроса об условных выражениях ... вы спрашиваете: «Как бы я поставил условие, чтобы перейти из кадра 1-2?» Ну, что требует условие для продвижения кадра?

Пожалуйста, попробуйте задать четкие и краткие вопросы. Если вы просто пытаетесь обдумать условия, тогда я предлагаю вам поискать в Google и на этом сайте, так как там содержится масса полезной информации. Удачи!

==== Редактировать ====

Код, который вы добавили 2 дня назад (т.е. я пробовал это «ничего» ...), ничего не должен делать :)

В следующей строке кода создается экземпляр объекта Timer, который будет отмечаться каждые 1000 миллисекунд forever :

var timer:Timer = new Timer(1000);

Вот почему ваш обработчик onTimerComplete(e:TimerEvent) никогда не вызывается. Если вы хотите, чтобы он в конце концов прекратил тикать, скажем, через 5 секунд, вы бы хотели использовать следующий фрагмент вместо вашего:

var timer:Timer = new Timer(1000, 5); // timer will tick every second (1000 milliseconds) for 5 seconds

Вы также никогда не регистрируете обработчик событий TimerEvent.TIMER. Вот почему ваш обработчик onTimer($evt:TimerEvent) никогда не вызывается. Если вы хотите захватить это событие, вам нужно зарегистрировать обработчик следующим образом:

timer.addEventListener(TimerEvent.TIMER, onTimer);

Если вы добавите этого слушателя, обязательно удалите его в обработчике onTimerComplete(e:TimerEvent) таким же образом, как обработчик TimerEvent.TIMER_COMPLETE.

Надеюсь, это поможет. Удачи!

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