Является ли когда-либо предпочтительным отделить код действия от временной шкалы, используя addFrameScript? - PullRequest
2 голосов
/ 19 октября 2011

Существует недокументированный метод addFrameScript, который является частью класса MovieClip. По-видимому, некоторые люди используют этот метод, чтобы исключить написание любого кода внутри фреймов на временной шкале и поместить весь свой код в один отдельный файл .as (например, Maintimeline.as).

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

Является ли этот метод предпочтительным, и есть ли практические примеры, когда это обычно делается?

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

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

  • кадры добавляются / удаляются без кода
  • символы перезаписываются
  • децентрализация кода (это означает, что вы получили код для MC в файле .as, но также и в .fla, поэтому вам всегда нужно проверить в .fla, что происходит, где

Также гораздо проще работать с дизайнером / аниматором, если вы пропустите весь код временной шкалы. Все, что вам нужно, это несколько рекомендаций, которые необходимо строго соблюдать:

  • для дизайнера: когда что-то должно произойти в определенном фрейме, создайте метку с семантическим именем, разработчик может использовать эти метки для получения номера фрейма
  • для разработчика: НИКОГДА НЕ КОГДА-ЛИБО добавлять скрипты кадров, основанные только на номере кадра (кроме некоторой инициализации на кадре 1, но даже тогда) ВСЕГДА используйте метки!

Теперь есть фактически один случай, когда я действительно пишу код на самой временной шкале, и это строго для остановки линейной анимации с одной конечной точкой и без пауз. Вот и все.

- РЕДАКТИРОВАТЬ -

ОЧЕНЬ редко случается так, что вам действительно нужен рамочный скрипт, в большинстве случаев вы можете решить его по-разному, что всегда предпочтительнее.

2 голосов
/ 19 октября 2011

Около года назад я написал статью о том, как сохранить все ваши "добрые сроки", но все же использовать хорошую практику ООП, как описано Крейндерсом и Мистером / Миссис.Колбасы http://www.developria.com/2010/04/combining-the-timeline-with-oo.html.Я сделал презентацию для Atlanta Flash и Flex User Group, включая файлы, основанные на этой статье, которые вы можете проверить здесь http://www.meetup.com/atlflex/files/.

2 голосов
/ 19 октября 2011

Это всегда предпочтительнее, чтобы отделить графику от кода. Единственный код, допустимый в MovieClip, возможно, будет командой stop(), хотя лучше обойти это.

Лично я не использую addFrameScript(), так как мне проще связать графику с определенным классом (либо экспортировав ее во Flash, либо создав класс и добавив MovieClip в качестве свойства). Работать с ним намного чище и лучше работать при изменении графики или кода.

1 голос
/ 20 октября 2011

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

Кроме того, вы можете программно получить как текущий кадр фрагмента ролика, так и соответствующий ярлык.

http://adobe.ly/osU3A6 - текущее свойство кадра

http://adobe.ly/o1JVn5 - список меток кадра

Создать прослушиватель на ENTER_FRAME, который будет проверять метки видеоклипов.Вы могли бы даже написать симпатичный небольшой сервис, который предоставил бы централизованное место для регистрации слушателей с каким-то специальным «синтаксисом меток».

Примерно так:

LabelDispatcher.addEventListener (movieClipTarget,frameLabel, callBackFunc);

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

addEventListener (target: movieClip, frameLabel: String, callBack: Function): Boolean {

   this.internalListOfListens.push( { target:target, frameLabel:frameLabel, callBack:callBack } );

}

Когда вы будете готовы начать действовать с метками кадров, зарегистрируйте этот прослушиватель на EnterFrame рабочей области:

открытая функция labelListenerPulse (событие: событие): void {

for( listenedTo:Object in this.internalListOfListens ) {

       var target:MovieClip = listenedTo.target as MovieClip;

       if ( target.currentFrameLabel == listenedTo.frameLabel ) {

            var callBack:Function = listenedTo.callBack as Function;

            callBack( new Event( blah blah blah... ) );   

       }

 }

}

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