2012-02-20 2 views
4

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

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

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

Я хочу закодировать его так, чтобы каждый воспроизводился последовательно друг за другом, но у меня есть реальный трудный доступ к другим временным рамкам через 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», и, похоже, он работает нормально, поэтому я предполагаю, что это проблема.

ответ

3

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

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

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

будет просто сделать NRPSText_mc остаться на этикетке "NRPSFadeIn", так называется каждый кадр.

В-третьих, если у вас есть мувиклип на сцене, и вы указали его имя экземпляра, вы можете ссылаться на его временную шкалу из родительской области (основной временной шкалы) на это имя экземпляра, как и у NRPSText_mc.gotoAndPlay("NRPSFadeIn"). Если у вас есть скрипт INSIDE, то movieclip просто использует 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 событий.