我使用Inkscape和fxg插件创建了一个fxg文件。它被称为BugattiVeyron.fxg
我还使用flex sdk 4.6和FlashDevelop 4创建了AS3项目,并使用像这样的import语句导入了这个文件
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 :(得分:3)
我自己也在努力解决这个问题,最后想出了如何让它发挥作用。有两种方法。
您的FXG文件需要与Main.as位于同一目录中,以便像这样调用它:
import BugattiVeyron;
但是当然,如果您将图像资源放在另一个文件夹中,则必须在项目中设置类路径才能引用FXG文件。显然,我们无法访问另一个目录中的FXG文件,如下所示:
import ../lib/BugattiVeyron
如果右键单击FlashDevelop中的项目并从上下文菜单中单击“属性”,则可以将选择的目录添加为类路径,以便访问FXG文件。在我的例子中,我添加了lib作为项目的类路径。这使我能够像您之前尝试的那样导入我的资产。
import BugattiVeyron;
public class Main extends Sprite {
var bugatti:BugattiVeyron = new BugattiVeyron();
..some code here...
}
希望这会有所帮助,我挣扎了一个星期试图解决这个问题。
答案 1 :(得分:0)
我遇到了同样的问题,特别是在尝试从FlashDevelop中仅来自AS3的项目(没有MXML)实例化包含文本(<RichText>
元素)的FXG时。我能够导入并使用其他没有包含RichText的FXG文件。
我对确切的细节很朦胧,但似乎错误是由于调用createText()
(在您的情况下为resources::BugattiVeyron_Text_2126220941/createText()
)而导致的,因为Flex库不是&# 39; t初始化为纯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&#34;部分的必要更新。)
或者,如果您不想要Flex库的运行时开销,则可以编辑FXG以将文本转换为路径。这应该适用于仅限AS3的项目,但如果有其他FXG功能遇到类似的问题,我也不会感到惊讶。