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

StackOverflow https://stackoverflow.com/questions/46136

Вопрос

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

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

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

Это было полезно?

Решение

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

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

class your.package.YourClass
{
}

становится

package your.package
{
    class YourClass
    {
    }
}

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

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

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

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

Явное ключевое слово «переопределить»

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

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

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

Заключение

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

Другие советы

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

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

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

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

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

Вводный слайд-презентация Grant Skinners Workshop AS3http://gskinner.com/talks/as3workshop/

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

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

Майк Чемберс

mesh@adobe.com

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top