Как сделать суперкласс, доступный во Flex и Flash? - PullRequest
1 голос
/ 04 февраля 2011

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 04 февраля 2011

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

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

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

Мое решение заключалось в создании оболочки.

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

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

тогда вы создадите свои действия вот так

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

Последнее, что нужно сделать, это создать класс Gecko, который расширил бы Lizard и имел бы его в качестве конструктора

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

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

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

для дальнейшего прочтения посмотрите шаблон проектирования декоратора. Мне показалось, что книга по шаблонам проектирования *1035* весьма полезна.

...