ActionScript 3 — сброс таймера в каждом кадре (тест)

Я пытался создать простую викторину, в которой вы выбираете ответ, воспроизводите правильную/неправильную анимацию, а затем позволяете выбрать другой вопрос. Каждый кадр вопроса дает вам 30 секунд, чтобы выбрать ответ, а затем перенаправляет вас к кадру «время истекло». Довольно просто. До сих пор все работало гладко, кроме таймера. Я могу заставить его работать в одном кадре, но когда вы нажимаете кнопку или по какой-то другой причине меня перенаправляете на другой кадр, происходит сбой всей программы.

Я предположил, что могу исправить это, остановив таймер в «событии кадра выхода», однако это только предотвратило запуск таймера (в то время как остальная часть программы продолжала работать гладко);

Публикации кода может и БУДЕТ недостаточно, поэтому проверьте файл самостоятельно: http://www.filedropper.com/semifinalsq

Мне нужно это для школьной викторины, и я не мог ничего найти в Интернете в течение нескольких дней. Возможно, у меня есть несколько ошибок или ошибок в том, как я «графически» сконструировал и связал все это, и в этом случае я не могу исправить это, пока кто-нибудь не взглянет на всю программу.

Если можно сделать что-нибудь из кода всего 1 кадра:

import flash.events.TimerEvent;
import flash.utils.Timer;

var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER, countdownHandler);
function  countdownHandler(event:TimerEvent):void{  
countdown.text = 30-myTimer.currentCount+" s";
if(myTimer.currentCount==30){gotoAndStop(5)}    
}   

Это мой код таймера, где кадр 5 — это кадр «время истекло». Этот бит работает отлично, но как мне его использовать, чтобы он сбрасывался всякий раз, когда вводится новый кадр с таймером? (Итак, как мне остановить его и перезапустить в определенных кадрах?);

Помощь будет высоко оценена!


person kGrozdanovski    schedule 27.10.2014    source источник
comment
Пожалуйста, опубликуйте соответствующий код. (Некоторым людям не нравится скачивать файлы от незнакомцев).   -  person BadFeelingAboutThis    schedule 27.10.2014
comment
Да я понимаю... Сообщение отредактировано.   -  person kGrozdanovski    schedule 27.10.2014
comment
Где вы запускаете (и останавливаете) свой таймер?   -  person BadFeelingAboutThis    schedule 27.10.2014
comment
Прежде чем перейти к кадру 5, вам нужно остановить таймер и удалить на нем прослушиватели событий.   -  person BadFeelingAboutThis    schedule 27.10.2014
comment
Я не определил никаких триггерных событий. Он просто начинается всякий раз, когда начинается кадр с вопросом. (Я хочу, чтобы он сбрасывался в каждом кадре с вопросом, но у меня также есть кадры, которым не нужен таймер и, следовательно, нет динамического текстового объекта для отображения таймера, поэтому всякий раз, когда кадр с этим кодом входит в эти кадры, мигает сходит с ума)   -  person kGrozdanovski    schedule 27.10.2014
comment
Да, я пытался это сделать, но всякий раз, когда я это делал, таймер вообще не работал...   -  person kGrozdanovski    schedule 27.10.2014
comment
единственное, что я могу сказать, это то, что вся структура неверна. вообще писать коды as3 на фреймах совершенно некорректно и вам нужно это изменить.   -  person Mehdi Golzadeh    schedule 27.10.2014
comment
Должен заметить, что у меня очень скудное понимание flash. У меня есть код таймера на отдельном слое, в то время как (просто потому что я должен) я храню код для кнопок на слое с объектами кнопок. Поэтому мне очень нужна пошаговая помощь в этом вопросе.   -  person kGrozdanovski    schedule 27.10.2014
comment
Должен ли я поместить следующий код в функцию, запускаемую событием EXIT_FRAME? мойТаймер.стоп(); myTimer.removeEventListener (TimerEvent.TIMER, обратный отсчет);   -  person kGrozdanovski    schedule 27.10.2014
comment
Ну, я сделал, и это не сработало. Таймер вообще не запускался, а остальное работает нормально.   -  person kGrozdanovski    schedule 27.10.2014
comment
вы не хотите использовать обработчик кадров ENTER или EXIT, они запускаются каждый тик частоты кадров независимо от того, движется ли указатель воспроизведения (так что, даже если вы остановились на кадре, если ваша частота кадров установлена ​​​​на 30 кадров в секунду, эти события будут продолжайте стрелять 30 раз каждую секунду).   -  person BadFeelingAboutThis    schedule 27.10.2014
comment
О, это многое объясняет. Я полагал, что они запускаются только тогда, когда вы открываете фрейм. Во всяком случае, я исправил это, вставив stopTimer в функции buttonHandler. Работает плавно!   -  person kGrozdanovski    schedule 27.10.2014
comment
то, что вы хотите сделать, это когда вопрос сделан (независимо от того, был ли на него дан ответ или таймер завершен), вы хотите остановить таймер, удалить его слушателя, затем двигаться дальше (к кадру 5 или куда-либо еще), затем, когда вы начать новый вопрос, снова запустить таймер и снова добавить слушателя   -  person BadFeelingAboutThis    schedule 27.10.2014


Ответы (1)


Решение:

myTimer.stop();
myTimer.removeEventListener(TimerEvent.TIMER, countdownHandler);

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

Хотя это может не помочь в других ситуациях, для викторины схожей структуры это довольно простое решение.

Особая благодарность пользователю LDMS

person kGrozdanovski    schedule 27.10.2014