2011-02-04 3 views
1

Я работаю над проектом, использующим Flash Professional и Flash Builder. Художественная команда создает активы в Flash Pro и публикует проект как SWC. Затем я копирую SWC в каталог lib проекта Flash Builder и получаю доступ к этим активам.Как я могу сделать суперкласс, который доступен в Flex и Flash?

Художественная команда создает много предметов того же типа; предположим, что они делают много символов/компонентов ящерицы. Все эти ящерицы имеют похожие анимации (walk_left, walk_right и т. Д.), И из-за этого все они имеют константы, определенные в ActionScript (WALK_RIGHT_START, WALK_RIGHT_END и т. Д.), Относящиеся к ключевым кадрам в их анимации.

С точки зрения Flex, в зависимости от того, какую ящерицу загружаю, я хочу сказать, чтобы она шла слева. Так что я создал суперкласс в Flash Professional, и теперь все классы, как для ящериц в Flash Professional продлить этот класс - Lizard.as

Это все хорошо и хорошо, но когда я хочу, чтобы добавить больше сложности в мои ящерицы, я не хочу открывать проект Flash Pro, редактировать класс, перекомпилировать SWC, отправить его обратно в Flex и затем проверить его. Я хочу, чтобы иметь возможность иметь мою Ящерицу суперкласс доступны для редактирования в Flex - поэтому я сделал еще один суперкласс в Flex: Lizard.mxml

В Flex, каждый компонент ящерицы (как Gecko.mxml) в настоящее время проходит Lizard.mxml, и каждый содержит компонент AS, определенный в SWC (Gecko.as в этом случае).

Это кажется довольно запутанным: компонент mxml, расширяющий суперкласс mxml, содержащий компонент AS, который расширяет AS-суперкласс.

Что я хотел бы сделать, это определить один суперкласс в проекте Flex, чтобы мои компоненты, определенные в Flash Pro, расширили этот класс (это часть, которую я считаю невозможной), а затем добавьте компоненты Flex (Gecko.mxml) расширяют их.

Есть ли способ сделать это?

+1

Если вы создаете только класс AS3, вы можете использовать его как из Flex, так и для Flash и редактировать его в обоих местах. С помощью некоторых путей сопоставления каталогов/библиотек вы можете использовать один и тот же точный файл в обоих местах. Однако, если вы измените этот класс, вам все равно придется перекомпилировать. Вместо того, чтобы расширяться, мне интересно, будет ли композиция работать лучше для вас. Имейте независимый класс, который каждый использует. – JeffryHouser

ответ

1

Вы не можете изменить класс, его можно продлить.

Несколько лет назад я работал над проектом, в котором интерфейс был выполнен во Flash и скомпилирован в компиляторе flex.

У меня были разные компоненты ui, которые состояли из разных классов. Но нужно было относиться к ним одинаково для логики, которую я вставлял. Это означало, что все классы должны были иметь тот же базовый класс, который должен был быть моим собственным базовым классом. поэтому Button и List должны были расширять customUIClass. Который, насколько я знаю, вы не можете сделать (пожалуйста, дайте мне знать, если вы читаете это и знаете способ)

Моим решением было создать обертку.

Применительно к вашему вопросу будет идти-то вроде этого

  • сделать «суперкласс» называется Lizard (или животное, организм и т.д.), который расширяет MovieClip (или casaMovieClip).
  • Lizard будет иметь переменную private var _view:MovieClip
  • и ä иницилизации конструктора «инициализации ($ Тип: MovieClip)` (не фактический конструктор)
  • где _view=$type и добавить вид addChild(_view);

, то вы бы создавать свои действия как этот

function walk():void{ 
    _view.gotoAndPlay("WALK"); 
} 

последнее, что было бы создать класс Gecko, который мог бы расширить ящерица, и будет есть это как конструктор

function Gecko(){ 
    init(new flaGecko()); 
} 

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

или вы могли бы просто создать var gecko:Lizard = new Lizard(new flaGecko());, но тогда вы должны бы Init() как конструктор.

для дальнейшего ознакомления смотрите рисунок декоратора. Я нашел AS3 design patterns book очень полезным.

+0

Если вы хотите изменить список и кнопку, чтобы они простирались от одного из ваших собственных классов, вы можете. В принципе, если у вас есть класс, определенный с той же структурой пакета, что и определенный в ваших зависимостях, компилятор разрешит одно внутри проекта, а не одно из зависимостей. Так, например, если вы делаете mx.controls.Button в своем приложении, он может что-то делать, а когда кто-то использует mx.controls.Button, он будет использовать ваш класс кнопок (по-прежнему не будет множественного расширения, хотя ваш базовый класс должен будет простираться от общего супер класс списка и кнопки для вашего случая). – shaunhusain

+0

Комментарии BTW, не предназначенные для аннулирования вашего ответа, на самом деле не понимают его достаточно ясно, чтобы сказать, что это хорошо или плохо. Хотя я также согласен с комментарием Flextras в том, что вы должны использовать обычный класс AS3 только как базовый класс в Flex и Flash. Я обычно считаю, что всегда полезно создавать базовые классы в Flex, написанные в AS3, только для более жесткого контроля над созданием детей и другими вещами. MXML просто делает для вас неявно, когда он преобразуется в AS3. – shaunhusain

 Смежные вопросы

  • Нет связанных вопросов^_^