Когда точно выполняется сценарий Flash-фрейма? - PullRequest
1 голос
/ 08 сентября 2010

У меня есть мувиклип, который содержит действия для кадра 1

this["myCustomVar"] = "bla";

Затем я делаю это:

var mc:MovieClip = new MyMovieClip();
trace(mc.hasOwnProperty("myCustomVar")); // is false

Почему у мувиклипа нет myCustomVar или, если говорить более широко:

Когда точно выполняются сценарии кадров в видеоклипах?

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

если вы используете flash 10, то в кадре 7 событий:

  1. Событие типа события Event.ENTER_FRAME отправлено
  2. Выполнен код конструктора детей MovieClips
  3. Событие типа события Event.FRAME_CONSTRUCTED отправлено
  4. Выполнены действия кадра MovieClip
  5. Кадр действий детей MovieClips выполнены
  6. Событие типа события Event.EXIT_FRAME отправлено
  7. Событие типа события Event.RENDER отправлено

чтобы вы могли прослушать событие EXIT_FRAME, после чего сценарий фрейма должен быть запущен, и переменная должна быть установлена.

Источник

0 голосов
/ 08 сентября 2010

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

this["myCustomVar"] = "bla";

Там вы определили новую переменную с именем myCustomVar в корневом экземпляре временной шкалы. Экземпляр - это отдельная вещь, которая существует индивидуально и может быть настроена. Однако настройка одного экземпляра НЕ меняет класс, который его первоначально определил. Подумайте о фабрике виджетов: если вы возьмете готовый виджет с конца сборочной линии и закрасите его красным, это не значит, что фабрика теперь будет производить красные виджеты ... вы только что изменили один экземпляр виджета, который выпал конец строки. Чтобы ваша фабрика производила красные виджеты, вам нужно изменить саму фабрику - или определение класса. Итак, я предполагаю, что у вас есть собственный класс, написанный для MyMovieClip? Если нет, вам нужно сделать это в MyMovieClip.as:

package
{
    import flash.display.MovieClip;

    public class MyMovieClip extends MovieClip
    {
        public var myCustomVar:String = "";

        public function MyMovieClip():void {
            super();
        }
    }
}

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

...