Размещение кода AS3 на таймлайнах сцены / MC а-ля AS2, а не в классах

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

У меня довольно большой опыт работы с ООП, и мне комфортно на уроках письма. Однако, поскольку я в основном использую Flash для анимации, мне почти никогда не нужно писать код ActionScript, кроме как для предварительных загрузок, субтитров, контроля качества, ссылок на веб-сайты и так далее. Фактически, я до сих пор настраиваю свои Flash-фильмы на использование AS2, потому что я привык к _1 _ / _ 2_, предварительным загрузкам AS2, субтитрам, контролю качества и даже getURL(). Конечно, я действительно хочу двигаться дальше сейчас, когда практически все используют Flash Player 9 или 10, и теперь, когда я баловался другими языками объектно-ориентированного программирования, такими как Java, C # и Objective-C.

Я новичок в AS3 и не очень хорошо разбираюсь в AS2. Учитывая мое текущее использование ActionScript, есть ли случаи, когда все еще можно использовать очень простой код AS3 на временной шкале вместо перемещения кода в класс, тем более что переход в класс может означать излишнее увеличение количества LOC с 4 до 40 ? (Черт возьми, последний случай ("вместо ...") вообще вызывает беспокойство?)


person BoltClock    schedule 02.06.2010    source источник


Ответы (2)


Если вы уже знакомы с AS2 (и у вас есть опыт работы с другими языками), переход на AS3 не должен быть слишком сложным. Есть несколько мест, где все немного изменилось: в основном модель событий и некоторые широко используемые API, такие как flash.net (т. Е. Загрузка материалов, будь то изображения, SWF-файлы, звуки, XML и т. Д.) И список отображения (много больше возможностей, чем просто мувиклип, более связное, повторное родительство и т. д.). Работа с XML тоже изменилась (навсегда), она стала более мощной и простой (но вы можете использовать старый API, если хотите, он все еще там). Однако основная часть самого языка практически не изменилась.

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

Я не вижу проблем с размещением материала на сцене в IDE и использованием фрагментов ролика для анимации. ИМО, вот почему они там в первую очередь. Я знаю, что некоторые люди одержимы созданием и позиционированием всего с помощью кода. Я не из таких. Для меня IDE может быть хорошим инструментом для макета, анимации и т.д., по крайней мере, в большинстве случаев (с другой стороны, для некоторых очень динамичных вещей вам также потребуется кодировать макет).

Так что я бы не стал прямо советовать против умеренного использования кода временной шкалы. Если это соответствует вашим потребностям, вписывается в ваш рабочий процесс и позволяет делать то, что вам нужно, без невозможности поддерживать (или даже следить) за беспорядком, почему бы и нет?

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

person Juan Pablo Califano    schedule 03.06.2010
comment
Спасибо за ваш совет. Да, я тоже не из тех, кто против IDE - хотя, как только я серьезно займусь AS3, я обязательно буду писать код, используя FlashDevelop или что-то в этом роде. - person BoltClock; 04.06.2010
comment
Без проблем. Я использую IDE регулярно, но для подготовки ресурсов и, возможно, добавления stop () здесь и там или dispatchEvent, чтобы сообщить коду, что анимация началась или закончилась. Но помимо этого, я пишу код в FlexBuilder. Я использовал FD около года, и я думаю, что это действительно здорово (как редактор, я думаю, что он лучше, чем FB). Я перешел на FB из-за отладчика и профилировщика. - person Juan Pablo Califano; 04.06.2010

Из приведенных вами примеров использования Flash видно, что ничего не изменилось, что могло бы усложнить задачу. Нет причин, по которым вам следует использовать внешний код для всего вышеперечисленного. Вы можете работать почти так же, как и раньше (gotoAndPlay, gotoAndStop все еще существуют и работают нормально). Единственное, что приходит в голову, более утомительное, чем раньше, - это то, что больше нет getURL(). Однако Senocular переделал класс getURL, и вы можете найти его здесь.

Я бы сказал, только если ваш проект особенно тяжелый по коду, переместите большую часть, если не все, в классы и правильно структурируйте его в стиле ООП. Черт возьми, вы даже можете просто передать ссылку на свою сцену базовому классу и работать таким же образом довольно просто.

На временной шкале .fla:

import com.yourdomain.Main;

var main:Main = new Main(this);

Во внешнем основном классе:

package com.yourdomain
{   
    public class Main
    {
        private var mainTimeline:Object;

        public function Main(_mainTimeline:Object):void
        {
            mainTimeline = _mainTimeline;

            mainTimeline.gotoAndPlay("fScream");
        }
    }
}
person Daniel Carvalho    schedule 03.06.2010
comment
Спасибо за пример кода. Кроме того, могу ли я добавить прослушиватель событий ENTER_FRAME к классу Main и проверять наличие определенных кадров в его обработчике, если, например, я хочу управлять временной шкалой в более поздних частях моего фильма? - person BoltClock; 04.06.2010
comment
Вам нужно будет изменить класс Main, например, расширить его Sprite, чтобы он получал события. Но даже без этого, если вам нужно было отследить mainTimeline.currentFrame, он вернет вам текущий кадр, на котором находится ваша основная временная шкала, без использования слушателей. - person Daniel Carvalho; 04.06.2010