.currentFrame в ActionScript 3 - PullRequest
       3

.currentFrame в ActionScript 3

4 голосов
/ 21 февраля 2012

Я спрашивал раньше с похожей проблемой и получил отличный ответ, поэтому я прошу прощения, если это немного расстраивает.Надеюсь, это будет быстро.Я разрабатываю интерактивное учебное пособие по Flash, чтобы объяснить сложную биологическую проблему, и я структурировал временную шкалу так, чтобы в ней было не более двух кадров и четырех слоев.Я разработал это раньше на временной шкале сцены, но это стало настолько запутанным и с несколькими проблемами, что я решил, что мне придется переделать это так.

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

У меня есть четыре слоя на основной временной шкале - Действия, Кнопки, Молекулы и Названия.В каждом из них есть соответствующие изображения и анимация.

Я хочу закодировать его так, чтобы каждое из них воспроизводилось последовательно за другим, но мне очень трудно получить доступ к другим временным шкалам через AS3.

В настоящее время яИмейте это в слое Actions:

import flash.events.Event;

NRPSText_mc.addEventListener(Event.ENTER_FRAME, FadeIn);

function FadeIn(event:Event):void
{
    if (MovieClip(this.root).currentFrame > 0) {
        NRPSText_mc.gotoAndPlay("NRPSFadeIn")
    }
}

ColourButton_mc.addEventListener(Event.ENTER_FRAME, BtnFadeIn);

function BtnFadeIn(event:Event):void
{
    if (NRPSText_mc.currentFrame == 30) {
        ColourButton_mc.gotoAndPlay("ButtonPress")
    }
}

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

проблема в том, чтобы знать, что ставить перед ".currentFrame" в каждом случае, и я нигде не могу его найти!До сих пор мне удавалось использовать «this» и «MovieClip (this.root)», но мне нужно уметь выяснить, как ссылаться на эти встроенные временные шкалы, чтобы это работало.Я пробовал эти коды с помощью «trace», и, похоже, он работает нормально, поэтому я предполагаю, что именно в этом заключается проблема.

1 Ответ

3 голосов
/ 21 февраля 2012

Прежде всего, если у вас есть код на основной временной шкале вместо MovieClip(this.root).currentFrame, вы можете просто использовать currentFrame, поскольку вы ссылаетесь на объект, для которого установлен скрипт.

Во-вторых, это

if (MovieClip(this.root).currentFrame > 0) {
    NRPSText_mc.gotoAndPlay("NRPSFadeIn")
}

просто заставит NRPSText_mc остаться на метке "NRPSFadeIn" с момента вызова каждого кадра.

В-третьих, если у вас есть мувиклип на сцене и вы задали его имя, вы можете ссылаться на его временную шкалу ОТ родителя.область действия (основная временная шкала) по этому имени экземпляра, как вы делаете с NRPSText_mc.gotoAndPlay("NRPSFadeIn").Если у вас есть сценарий ВНУТРИ, этот мувиклип просто используйте gotoAndPlay() и currentFrame, потому что вы находитесь в том же объекте, что и сценарий.

Также вы делаете это немного неправильно.Обычный подход заключается в использовании временной анимации или некоторой библиотеки анимации движения, такой как TweenMax.Поскольку вы используете Flash IDE, правильный способ сделать то же самое будет следующим: создавать отдельные фрагменты ролика с любой анимацией для ваших объектов;разместите их на главной временной шкале, которая имеет собственную анимацию, включающую эти клипы;В любом кадре, которым вы хотите управлять своими внутренними клипами, установите отдельные сценарии с помощью stop(), gotoAndPlay() и т. д.

Если вы хотите получать уведомления о завершении воспроизведения клипа, используйте события AS3.Например, вы получили видеоклип с именем mc, добавили сценарий к последнему кадру dispatchEvent(new Event("stopped!")); stop(); и на главной временной шкале

mc.addEventListener("stopped!", listener);
function listener(event:Event):void {
  trace("mc stopped!");
}

Таким образом, это намного проще, чем проверять номера кадров при каждом событии enterframe.

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