Проблема с использованием компонентов Flash в нескольких файлах SWC - PullRequest
1 голос
/ 05 февраля 2010

[Редактировать: Короткая версия - как правильно обрабатывать коллизии пространства имен в файлах SWC, если один SWC имеет меньше классов из этого пространства имен, чем другой?]

У меня довольно большое приложение Flash, которое я создаю в Flash Builder (потому что кодирование / отладка в Flash IDE ... не очень хорошо), и у меня есть тонна внешних SWC-файлов, на которые я ссылаюсь в моем заявлении. До сих пор это хорошо работало - размер файла большой, но это намного проще, чем загрузка в SWF-файлы, тем более что я расширяю большинство классов в каждом SWC и добавляю собственный код таким образом (это очень Тяжелое приложение.) У меня проблема, когда у меня есть компоненты Flash, такие как ComboBox или TextInput, в более чем одном SWC. Какой бы SWC не был скомпилирован последним, он будет работать нормально, но другие не будут работать с ошибками, подобными следующим:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::MovieClip@1f21adc1 to fl.controls.TextInput.
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at com.company.design.login::LoginForm()
    at com.company.view::Login()[/Users/ken/Workspace/src/com/company/view/Login.as:22]
    at com.company.view::Main/showLogin()[/Users/ken/Workspace/src/com/company/view/Main.as:209]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at com.company.view::Navigation/handleUIClick()[/Users/ken/Workspace/src/com/company/view/Navigation.as:88]

Я исследовал компоненты, ComponentShim и т. Д., Но я бегу к кирпичной стене. Я подумал, что это может быть тот факт, что некоторые компоненты имеют свои измененные скины в исходном FLA, поэтому я попытался заменить их скинами по умолчанию, но, похоже, это не помогло. Как я могу гарантировать, что у меня есть компоненты, импортированные и доступные для всех моих классов, и в то же время я могу их обрабатывать и включать в свои различные FLA? (Я никогда не создаю их новые экземпляры, они все выложены моим дизайнером.)

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Я не могу найти подробное исправление (очевидно, рабочее письмо, которое я использовал в то время, уничтожало старые сообщения без моего ведома!), Но короткий ответ - создать один FLA, содержащий все компоненты, которые вы хотите использовать в установите для этих компонентов (и ComponentShim) значение «Export for Runtime Sharing». Затем в других ваших FLA, когда вы хотите компонент, перетащите его из библиотеки FLA компонентов (он должен отображаться в вашей основной библиотеке с включенным «Импорт для времени выполнения».) Убедитесь, что у вас нет ComponentShim в ваша основная библиотека Вам понадобится SWF-файл скомпилированного компонента в той же папке, что и ваши FLA-файлы.

То, что это делает, - хранит весь код компонента, включая скины, в одном центральном месте, поэтому при компиляции (будь то SWF или SWC, хотя эта проблема возникает в основном при использовании SWC) не возникает конфликтов.

1 голос
/ 09 апреля 2010

Не знаю, поможет ли это вам, но у меня была похожая проблема с активом в библиотеке SWC, который был визуальным представлением для класса в моем основном проекте. Я закончил тем, что визуальным ресурсом стал класс, созданный во Flash, который расширил класс в моем проекте, а не имел одно и то же имя.

Например, мой актив и класс были com.blah.TitleBackground. Чтобы решить эту проблему, я сделал визуальный ресурс класса com.blah.TitleBackgroundAsset и установил базовый класс для компонента com.blah.TitleBackground. Это решило эту конкретную проблему для меня. У меня еще есть кое-что, но ваш пост вызвал идею решения конфликта имен.

...