Каков наилучший подход к переносу существующего проекта из Flash 7 / AS2 в Flex / AS3? - PullRequest
5 голосов
/ 05 сентября 2008

У меня есть большая кодовая база, предназначенная для Flash 7, с лотом классов AS2. Я надеюсь, что смогу использовать Flex для любых новых проектов, но много нового в нашей дорожной карте - это дополнения к старому коду.

Синтаксис для AS2 и AS3, как правило, одинаков, поэтому я начинаю задумываться над тем, как трудно будет перенести текущую кодовую базу на Flex / AS3. Я знаю, что все вещи, связанные с пользовательским интерфейсом, были бы ненадежными (в настоящее время пользовательский интерфейс генерируется во время выполнения с большим количеством вещей createEmptyMovieClip () и attachMovie ()), но вещи пользовательского интерфейса и контроллера / модели в основном разделены.

Кто-нибудь пробовал портировать большую кодовую базу кода AS2 на AS3? Насколько это сложно? С какими подводными камнями вы столкнулись? Какие-нибудь рекомендации по подходам к выполнению такого рода проектов?

Ответы [ 5 ]

6 голосов
/ 05 сентября 2008

Некоторые заметные проблемы, с которыми я столкнулся при попытке конвертировать большое количество классов AS2 в AS3:

Наименование пакета

class your.package.YourClass
{
}

становится

package your.package
{
    class YourClass
    {
    }
}

Требуется импорт

Вы должны явно импортировать любые используемые внешние классы - ссылки на них по их полному имени уже недостаточно.

Методы интерфейса не могут быть помечены как «публичные»

Это имеет смысл, но AS2 позволит вам сделать это, поэтому, если у вас есть какие-либо, их нужно будет удалить.

Явное ключевое слово переопределения

Любые функции, которые переопределяют родительскую функцию класса, должны быть объявлены с ключевым словом override , очень похоже на C #. Кроме того, если у вас есть интерфейсы, которые расширяют другие интерфейсы и переопределяют функции, эти переопределения должны быть удалены (опять же, как и в случае public, эта запись в любом случае не имеет смысла, но AS2 позволяет вам это делать) .

Все встроенные элементы Flash изменены

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

Заключение

Мне не удалось поработать над этим преобразованием, но я смог за несколько часов написать быстрый инструмент на C #, который обрабатывал все аспекты этого, кроме ключевого слова override . , Автоматизация импорта может быть сложной - в моем случае все пакеты, которые мы используем, начинаются с нескольких пакетов корневого уровня, поэтому их легко обнаружить.

1 голос
/ 16 сентября 2008

Мой опыт показывает, что лучший способ перехода на AS3 - это два этапа: первый - структурный, а второй - синтаксический.

Во-первых, проведите раунды рефакторинга, где вы находитесь в AS2, но постарайтесь максимально приблизиться к архитектуре AS3. Естественно, это включает в себя перемещение всех ваших фрейм-скриптов и скриптов #include в пакеты и классы, но вы можете сделать более тонкие вещи, такие как изменение всех ваших слушателей событий и диспетчеров для следования потоку AS3 (использование статических свойств класса для типов событий и регистрация методом а не по объекту). Вы также захотите избавиться от всех ваших «встроенных» событий (таких как onEnterFrame), и вам нужно внимательно изучить нетривиальное взаимодействие с мышью (например, перетаскивание) и взаимодействие с клавиатурой (например, определить, клавиша нажата). Эта фаза может выполняться постепенно.

Второй этап - преобразование из AS2 в AS3 - изменение «_x» на «x», всех API и так далее. Это не может быть сделано постепенно, вы должны сделать как можно больше одним махом, а затем начать исправлять все ошибки компиляции. По этой причине чем больше вы можете делать на первом этапе, тем больше боли вы избегаете на втором этапе.

Этот процесс работал для меня на достаточно большом проекте, но я должен отметить, что на первом этапе требуется четкое понимание структуры AS3. Если вы новичок в AS3, вам, вероятно, придется попробовать создать некоторые функции, которые вам понадобятся для переноса. Например, если ваш унаследованный код использует цели перетаскивания, вам нужно попробовать реализовать это в AS3, чтобы понять, как ваш код должен будет измениться структурно. Если вы затем реорганизуете свой AS2 с учетом этого, окончательные изменения синтаксиса должны пройти гладко.

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

И последнее замечание: я действительно не стал бы беспокоиться о таких вещах, как операторы import и override, по крайней мере, до такой степени, чтобы автоматизировать их. Если вы пропустите какой-либо из них, он будет пойман компилятором. Но если вы пропустите структурные проблемы, у вас будет гораздо больше боли.

1 голос
/ 16 сентября 2008

Вот несколько дополнительных ссылок для перехода с AS2 на AS3:

Grant Skinners Вводная слайд-мастерская AS3 Workshop http://gskinner.com/talks/as3workshop/

Ли Бримелоу: 6 причин для изучения ActionScript 3 http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Колин Мук: Essential ActionScript 3 (считается «библией» для разработчиков ActionScript): http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

микрофонные камеры

mesh@adobe.com

1 голос
/ 09 сентября 2008

Прежде всего, я надеюсь, что вы не используете eval() в своих проектах, поскольку в AS3 нет эквивалента.

Одна из вещей, которую я хотел бы сделать, - это просмотреть Руководство по миграции Adobe (которое в основном представляет собой подробный список того, что изменилось), пункт за элементом, и попытаться выяснить, можно ли изменить каждый элемент с помощью простая операция поиска и замены (возможно, с использованием регулярных выражений) или упрощение простого редактирования экземпляров вручную в соответствии с AS3. Вероятно, во многих случаях (особенно если, как вы сказали, объем переносимого кода достаточно велик), вам лучше всего будет написать сценарий изменений (т. Е. С помощью поиска и замены regex) и вручную исправить любые пограничные случаи, когда автоматические изменения не выполнены.

Будьте готовы выделить некоторое время на отладку и выполнение некоторых тестовых случаев.

Кроме того, как уже упоминали другие, попытка объединить SWF-файлы AS2 с SWF-файлами AS3 не является хорошей идеей и на самом деле даже не работает, поэтому вам определенно придется переносить весь код в одном проекте одновременно.

0 голосов
/ 12 сентября 2008

Перенос большого проекта, подобного этому, из as2 будет больше, чем простой поиск и замена. Новый синтаксис довольно похож и прост в адаптации (как упомянул lilserf), но, если не сказать больше, тот факт, что as3 более строг и новая модель событий, скорее всего, вызовет много проблем. Вам, вероятно, будет лучше, если более или менее переписать почти все с нуля, возможно, используя старый код в качестве руководства.

Миграция с as2 -> as3 с точки зрения знания довольно проста. Если вы знаете объект, ориентированный на as2, переход на as3 вообще не будет проблемой.

Вам все еще не нужно использовать mxml для вашего пользовательского интерфейса, если вы не хотите этого. Mxml просто обеспечивает быстрый способ создания пользовательского интерфейса (и т. Д.), Но если вы хотите сделать это самостоятельно с помощью ActionScript, вам ничто не помешает (это также, вероятно, будет проще, если у вас уже есть этот пользовательский интерфейс в коде as2). Flex (Builder) - это просто быстрый способ делать вещи, которые вы, возможно, не захотите делать самостоятельно, например, создавать пользовательский интерфейс и привязывать данные, но по сути это просто создание части .swf для вас - в этом нет ничего волшебного;)

...