2009-06-17 3 views
2

OK,скомпилируйте swc-вспышку для использования в flex, с классом, написанным в flex

Звучит сложно, но это не так. Вот так: Я хочу использовать некоторые активы (кнопки и т. Д.), Которые я создаю во Flash в проекте flex actionscript. Так как все мои активы ниже 10K, я не планирую загружать swf, дождитесь загрузки и создания интерфейса. Я хочу использовать swc и просто экземпляр клипов, которые мне нужны. Кроме того, я хочу, чтобы у моего класса Button были дополнительные свойства, и в этом проблема возникает.

Если в свойствах связи в Flash IDE я добавляю ссылку на пользовательский класс кнопок и трассирую дочерний элемент ButtonClip, я получаю правильную трассировку. Если тогда я создаю кнопку в классе Main в Flex, используя сгенерированный swc-файл и отслеживаю тот же дочерний элемент ButtonClick, я получаю null.

Почему? Есть ли способ обойти это? Я рассмотрел использование Flex Component Kit, но так как я работаю над простым проектом actionscript, и я не использую фреймворк Flex, я не вижу смысла использовать компонентный комплект на этом этапе.

Спасибо!

ответ

3

Я думаю, что получил.

My Button MovieClip был ссылкой на класс в той же папке src, что и остальная часть кода ActionScript в проекте ActionScript Flex. (Путь as3 classpath был установлен в «../» из папки с активами, в которой находится файл .fla, один уровень до src)

Когда Flash скомпилирован, класс был найден, и я попал в файл .swc , Вот почему я получил символ, прослеженный от вспышки. Когда Flex скомпилирован, класс был найден в каталоге src, поэтому была скомпилирована новая версия того же класса, хотя она уже существовала в swc-файле. Поскольку flex нашел файл .as, но не знал, что он связан с символом в Flash IDE (я не думаю, что он может это сделать), Flex создал свою версию этого класса, но поскольку ни один символ не был связан к этому классу, ребенок кнопки Button I отслеживал значение null.

Я предполагаю использовать пакеты и поддерживать классы, связанные с fla, поэтому Flex не будет компилировать один и тот же класс дважды.

Странно, что я не получил никаких предупреждений или ошибок, поэтому я решил, что все в порядке.

Быстрое и не столь грязное обходное решение состояло в том, чтобы удалить физический класс Button из файловой системы, чтобы Flash мог сгенерировать его версию во время компиляции и иметь ссылки на дочерние элементы символа Button. Затем в Flex я создаю класс, который расширяет Button и добавляет код, который мне нужен. Поскольку сгенерированный класс скомпилировался в .swc-файле, Flex мог это видеть, и у меня не было проблем с расширением.

Это было! Боб, ты дядя!

Я предполагаю, что то, что происходит, я не уверен на 100%. Это то, что моя интуиция воспринимает как должное посредством наблюдения, поэтому я могу быть технически ошибочным. Если у кого есть какие-либо исправления, они приветствуются.

+0

Джордж, это решение? У меня все еще есть проблемы с написанием классов для моего SWC MC's в Flex ... спасибо :) – dani

+0

@dani Как только SWC скомпилирован из Flash и добавлен в Flex, можете ли вы создавать классы из этого SWC? Если это так, все, что вам нужно сделать, это либо использовать сопоставление, либо наследование (что лучше всего подходит для вашей настройки). –

+0

Спасибо, Джордж. Я могу создать экземпляр классов SWC, а затем состав/наследование, похоже, является ключевым словом. Ваш совет помог мне найти эту статью: http://www.flashdevelop.org/wikidocs/index.php?title=AS3:FlexAndFlashCS3Workflow – dani

2

Я не уверен, правильно ли я правильно прочитал ваш вопрос, но хотите ли вы вставлять изображение/объект, который доступен с самого начала, при загрузке образа/активов после запуска приложения?

Если это так, то ознакомьтесь с этой ссылкой. В нем объясняется, как встраивать любые активы в проект ActionScript. http://kennethsutherland.com/2009/04/21/why-flex-why-actionscript-why-flash/

Надеюсь, что это ваш после.

+0

yup. Ты понял. Я хочу, чтобы некоторые активы были встроены во избежание загрузки. Спасибо за сообщение. Это удобно, но этот сценарий (создание гибкости как компилятивного проекта во Flash) немного противоположно моему (компиляция swc во flash для использования в flex). Теперь я размышляю над компиляцией swc во флеше и думаю о том, как использовать тег [Embed] из swf. Тем не менее, я думал, что вы можете связать MovieClip с внешним классом, пакетом, который находится в swc, и использовать его в flex. Это проблема, о которой я не думал, что наткнулся, и мне любопытно, в чём это решение. –

+0

Я бы нажал (я не являюсь флеш-CS3), вплоть до того, что на самом деле включено в SWC, созданный Flash IDE. Когда я создавал свой проект AS3 для флеш-проекта, один из наших дизайнеров объяснил, что они не использовали Embed (его не часть флеш-памяти), но они поставили на сцену любые активы, чтобы убедиться, что они были с самого начала , но они не могли «внедрить» их с помощью скрипта. Поэтому я нажимаю, что ваш SWC содержит код, но не активы. Попробуйте декомпилировать SWC (открыть с помощью winzip для получения swf), затем использовать декомпилятор для открытия swf http://www.flash-decompiler.com/ – kenneth

+0

Если активы не находятся в SWC, тогда вам нужно будет использовать метод, включенный в в блоге, чтобы вставить их. – kenneth