Как лучше всего перенести существующий проект с Flash 7 / AS2 на Flex / AS3?

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

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

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


person Herms    schedule 05.09.2008    source источник


Ответы (5)


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

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

class your.package.YourClass
{
}

становится

package your.package
{
    class YourClass
    {
    }
}

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

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

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

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

Явное ключевое слово 'override'

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

Все встроенные функции Flash изменены

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

Вывод

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

person lilserf    schedule 05.09.2008

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

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

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

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

person hasseg    schedule 08.09.2008

Вот несколько дополнительных рекомендаций по переходу с AS2 на AS3:

Слайддек семинара Grant Skinners вводного семинара AS3 http://gskinner.com/talks/as3workshop/

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

Колин Мок: Essential ActionScript 3 (считается «библией» для разработчиков ActionScript): https://rads.stackoverflow.com/amzn/click/com/0596526946

Майк Чемберс

[email protected]

person mikechambers    schedule 15.09.2008

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

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

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

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

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

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

person fenomas    schedule 16.09.2008

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

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

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

person Antti    schedule 12.09.2008