0

我已阅读 Adob​​e 的文档Using FXGEmbedding application assets,但只能通过 MXML 嵌入 FXG -

在此处输入图像描述

MyStars.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    firstView="views.Home">
</s:ViewNavigatorApplication>

Home.mxml(工作正常,通过 MXML 嵌入 FXG 时):

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:comps="assets.*"
        title="Home">

    <comps:Star />
</s:View>

Star.fxg(位于 src/assets/Star.fxg):

<?xml version='1.0' encoding='UTF-8'?>
<fxg:Graphic xmlns:fxg="http://ns.adobe.com/fxg/2008" version="2">    
    <fxg:Path x="9.399" y="10.049" data="M 82.016 78.257 L 51.895 69.533 L 27.617 89.351 L 26.621 58.058 L 0.231 41.132 L 29.749 30.52 L 37.714 0.241 L 56.944 24.978 L 88.261 23.181 L 70.631 49.083 Z">
        <fxg:fill>
            <fxg:SolidColor color="#FFFFFF"/>
        </fxg:fill>
        <fxg:stroke>
            <fxg:SolidColorStroke 
                caps="none" 
                color="#4769C4" 
                joints="miter" 
                miterLimit="4" 
                weight="20"/>
        </fxg:stroke>
    </fxg:Path>
</fxg:Graphic>

然而,当我尝试通过 ActionScript 实例化 FXG 图形时(仍在同一个 Flex 移动项目中),我收到编译错误:

在此处输入图像描述

Call to a possibly undefined method Star

主页.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:comps="assets.*"
        title="Home">

    <fx:Script>
        <![CDATA[
            import spark.core.SpriteVisualElement;

            private static const STAR:SpriteVisualElement = new Star();
        ]]>
    </fx:Script>  

<s:BitmapImage source="{STAR}" />
</s:View>

我也尝试过import comps;和/或新的 comps.Star();

当我将 FXG 文件移动到src/并使用xmlns:comps="*"一切正常。

4

2 回答 2

1

在 ActionScript 中导入 Star,根据您的代码,我假设它是这样的:

import assets.Star
private static const STAR:SpriteVisualElement = new Star();

我怀疑这将摆脱编译器错误。但是,我不确定您是否可以使用 SpriteVisualElement 作为 BitmapImage 的源。您可能必须将 SpriteVisualElement 添加为父容器的子容器,并使用 Flex 组件生命周期来执行此操作。

我已经对此进行了一些试验,并将这段代码贡献给了 Apache Flex具体的类在这里。虽然,出于某种原因,我错过了 FXG 元素可能是 SpriteVisualElements 的事实。如果您在 ActionScript 中创建组件,则使用我的 FXGImage 类不会免除您必须在 ActionScript 中调整组件大小和位置的责任。

于 2012-04-09T13:25:03.113 回答
1

对于 FXG 图形,请注意您的图稿尺寸。当您使用 FXG 创建对象时,图标周围的空白很重要。确保将图稿大小设置为图标的大小(图标周围没有多余的空白)。这样,当您嵌入到 bitmapImage 时,FXG 资产看起来会更好。

于 2013-12-04T01:59:34.163 回答