2012-03-14 14 views
2

Я создал файл fxg, используя Inkscape и плагин fxg. Это называется BugattiVeyron.fxgЯ получаю ошибку при импорте fxg в flex 4.6 project

Я также создал AS3 проект с использованием Flex SDK 4.6 и FlashDevelop 4 и импортировать этот файл, используя оператор импорта, как этот

import BugattiVeyron; 

и создать его экземпляр, как это

private var bugatti:BugattiVeyron = new BugattiVeyron(); 

Использование кнопки сборки в FD4 не дает никаких ошибок, но когда я запускаю ее, я получаю эту ошибку, хотя, когда я отклоняю все ошибки, файл хорошо импортирован, и я могу добавлять к нему события.

ошибка:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::updateCallbacks()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:7345] 
at mx.core::UIComponent/set nestLevel()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:4189] 
at spark.core::SpriteVisualElement/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:2247] 
at spark.core::SpriteVisualElement/addChild()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:2211] 
at resources::BugattiVeyron_Text_2126220941/createText() 
at resources::BugattiVeyron_Text_2126220941() 
at flash.display::Sprite/constructChildren() 
at flash.display::Sprite() 
at flash.display::MovieClip() 
at flash.display::Sprite/constructChildren() 
at flash.display::Sprite() 
at flash.display::MovieClip() 
at flash.display::Sprite/constructChildren() 
at flash.display::Sprite() 
at mx.core::FlexSprite()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\FlexSprite.as:61] 
at spark.core::SpriteVisualElement()[E:\dev\4.y\frameworks\projects\spark\src\spark\core\SpriteVisualElement.as:88] 
at resources::BugattiVeyron()[resources\BugattiVeyron-generated.as:10] 

так я получаю эту ошибку, но файл импортируется после того как я отклонять ошибки.

В чем может быть проблема, любая идея?

+0

1) пожалуйста, отправьте код 2) проверьте, не является ли экземпляр BugattiVeyron_Text недействительным при вызове метода createText()! –

+0

Я создал весь текст в svg как векторный путь, почему я все еще получаю ошибки в тексте? – Vlad

+0

Возможно, сам fxg поврежден? Возможно, плагин Inkscape не очень хорошо экспортирует. Как вы думаете? – Vlad

ответ

3

Я сам боролся с этой проблемой и, наконец, понял, как заставить ее работать. Есть два пути.

Ваш файл FXG должен находиться в том же каталоге, что и Main.as для того, чтобы назвать это так:

import BugattiVeyron; 

Но и конечно, если у Вас есть свои активы изображения в другой папке вы должны задайте путь класса в своем проекте, чтобы ссылаться на файл FXG. Очевидно, что мы не можем получить доступ к файлу FXG в другом каталоге, как это:

import ../lib/BugattiVeyron 

Если вы щелкните правой кнопкой мыши на проект в FlashDevelop и выберите Свойства из контекстного меню вы сможете добавить свой каталог выбора в качестве путь к классам, чтобы получить доступ к вашему файлу FXG. В моем случае я добавил lib как classpath для проекта. Это позволило мне импортировать свой актив, как вы это делали ранее.

import BugattiVeyron; 
public class Main extends Sprite { 
    var bugatti:BugattiVeyron = new BugattiVeyron(); 
..some code here... 
} 

Надеюсь, это поможет, я боролся неделю, пытаясь понять это.

0

Я столкнулся с той же проблемой, особенно при попытке создать экземпляр FXG, содержащий текст (элемент <RichText>) из проекта AS3 (без MXML) в FlashDevelop. Я смог импортировать и использовать другие файлы FXG, которые не содержали RichText без каких-либо проблем.

Я немного туманно о деталях, но кажется, что ошибка возникает вследствие вызова createText() (resources::BugattiVeyron_Text_2126220941/createText() в вашем случае), потому что библиотека Flex не инициализирована для чистого приложения AS3. Самое простое решение состоит в определении приложения в MXML, а не AS3, т.е.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:bv="*" 
> 
<bv:BugattiVeyron/> 
</s:Application> 

вместо

import BugattiVeyron; 
public class Main extends Sprite { 
    var bugatti:BugattiVeyron = new BugattiVeyron(); 
} 

(Более подробно об этом в связанный с этим вопрос: [Possible to use Flex Framework/Components without using MXML? Посмотрите на «необходимых обновлений. Flex 4 ".)

В качестве альтернативы, если вы не хотите накладных расходов времени исполнения библиотек Flex, вы можете редактировать свой FXG, чтобы преобразовать текст в пути. Это должно работать с проектами AS3, но я не был бы слишком удивлен, если бы были другие функции FXG, которые сталкивались с подобными проблемами.