Простой факт заключается в том, что вы не можете полагаться на это, чтобы работать:
gotoAndStop(2);
thing_on_frame_2.foo(); // no guarantee this will work.
Скорее всего, другие ответы, которые вы видели, выглядят смешными, потому что - это , но лучше нетобойти это.Фактически не будет гарантировано, что точка воспроизведения будет находиться во фрейме 2 сразу после вызова gotoAndFoo (), и если это не так, то нет гарантии, что объекты, помещенные в fla, будут созданы к моменту, когда вы попытаетесьчтобы получить к ним доступ.Раньше это было допустимо и допустимо в AS2, но в AS3 его уже нет.
Как правило, для решения этой проблемы вам необходимо выполнить одно из следующих действий:
- Убедитесь, что на него ссылаютсяобъект существует во всех кадрах временной шкалы.
- Добавьте скрипт для работы в качестве обратного вызова, который позволяет узнать, когда вы достигли рассматриваемого кадра.Это может быть либо сценарий фрейма, написанный на fla, либо тот, который вы добавляете на уровне класса с помощью функции addFrameScript.
Опционально, если вас интересует только прослушивание нажатий кнопок, а неДобавляя слушателей непосредственно к кнопкам, вы можете добавить слушателя в самый верхний контейнер кнопок, а затем проверить имя экземпляра объекта, отправившего событие, прежде чем решить, что делать с событием.Я предпочитаю этот метод, так как легче отслеживать, что является слушателем, а что нет.
Хаки или нет, вот как это делается.
РЕДАКТИРОВАТЬ с дополнительной информацией:
Я знаю, что если вы проследите текущий кадр, то будет возвращен номер, на который вы только что дали указание игровой головке перейти.Проблема в том, что нет никакой гарантии, что объекты на сцене в fla будут или не будут созданы к моменту, когда вы запросите их в коде.Вот почему вы используете рамочный скрипт, поскольку к тому времени гарантированно будут созданы объекты.
Что касается вопроса о том, есть ли события, которые вы можете прослушивать, которые гарантированно будут отправлены после построения, ответ таков:"Может быть. На какую версию Flash Player вы ориентируетесь?"Наиболее известным событием фрейма является ENTER_FRAME, поскольку оно поддерживается с самого начала.Со временем мы получили EXIT_FRAME, FRAME_CONSTRUCTED и т. Д., Которые все отправляют в разное время.FRAME_CONSTRUCTED - это тот, который вы хотите прослушать, но не очень громоздко и не практично добавлять слушателя FRAME_CONSTRUCTED всего на одну долю секунды, в которой он вам нужен, и затем немедленно его удалять, и, конечно, он не будет компилироваться, если вас принудительно заставятработать в CS3 (и приведет к падению FP9).
Я использую addFrameScript как лучший способ сделать это.Это было недокументировано в течение долгого времени (может быть, на самом деле все еще может быть), но это тот способ, которым флеш-компилятор внутренне присоединяет скрипт, который вы пишете в fla на временной шкале, к «кадрам» фрагмента ролика.