Я настраиваю кнопку на первом кадре, при нажатии на которую пользователь перейдет на второй кадр, используя этот код:
stop();
Btn_1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndPlayFromFrame_2);
function fl_ClickToGoToAndPlayFromFrame_2(event:MouseEvent):void
{
gotoAndPlay(2);
}
и на втором кадре я настроил динамический текст, который будет выполнять обратный отсчет, используя этот код:
var myTimer:Timer = new Timer(1000,60); // every second for 60 seconds
myTimer.addEventListener(TimerEvent.TIMER, onTimer);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
myTimer.start();
function onTimer(e: TimerEvent):void {
countdown_text.text = String(myTimer.repeatCount - myTimer.currentCount);
}
function onComplete(e: TimerEvent):void{
gotoAndStop(3);
}
дело в том, что после отладки продолжает появляться сообщение TypeError: Error #1009. Я знаю, что ошибка в строке 7 второго кода, но я понятия не имею, что с ней не так. Пожалуйста, помогите!





Я должен увидеть ваш исходный файл, но это, скорее всего, связано с тем, что countdown_text недоступен в этом кадре. Описание ошибки: «Не удается получить доступ к свойству или методу нулевой ссылки на объект», что означает, что он не может найти ссылку, которая является «countdown_text». Очень и очень плохая практика писать AS прямо во фреймах. Преобразуйте код в класс и назначьте его как класс документа. Вы можете найти документацию Adobe для класса документов здесь: https://helpx.adobe.com/animate/using/actionscript-publish-settings.html
Это не обязательно плохая практика. Для какого-то простого и понятного приложения нет абсолютно никакой необходимости впадать в крайность и писать все в классах. Лучшие практики работают только в той мере, в какой они служат вам.
Правда, хотя мне это совсем не кажется. Настоящая ловушка, повторно запускающая таймеры всякий раз, когда точка воспроизведения перемещается на кадр 2. Кроме того, кажется, что пользователь выиграет от понимания использования класса документа, который сделает то, что он пытается сделать, намного проще и без ошибок. Вероятно, ему даже не пришлось бы размещать здесь вопрос с более чистым кодом.
Я думаю, что это действительно сводится к тому, насколько сложным является проект. Для простого постраничного приложения, которое выполняет OP, количество сэкономленного времени и снижение сложности использования временной шкалы намного перевешивают небольшие потери памяти, такие как повторное создание таймера. Я тоже за использование классов, но иногда уродливое решение меньше и понятнее. Хотя я понимаю, откуда вы.
Вы определили countdown_text? Ошибка 1009 относится к нулевому объекту, поэтому, если countdown_text имеет значение null, вы не можете получить доступ к его свойствам (т.е. тексту)