1

我越来越多地使用 Flex Builder,并试图在 Flex Builder 中创建一个资产相当重的应用程序。我知道如何将 Flash 资源作为 SWC 发布或导出,以便它们在 Flex Builder 中可用,但是如果您有一个按钮 MovieClip,在 Flash 中具有帧状态,该按钮可以导出或包含在作为 SWC 发布的 swf 中,然后您想要将在 Flexbuilder 中创建的 Class 文件与此 SWC 资产相关联?

我想避免不必要的往返……每次我需要对 Flash 创作的 MovieClip 类进行编辑时,我都需要编辑该类并重新发布或重新导出到 SWC,以便它在 Flex Builder 中可用。即,我想在 Flexbuilder 中完成所有编码,同时在 Flash 中创作图形资产。

4

3 回答 3

3

有两种方法来看待这个问题。第一种方法(我经常使用)是将 FLA 包含在我的 Flex 项目的 lib 文件夹中。然后,在 FLA 中,我将路径设置为 ../src/(发布设置 -> Flash 选项卡 -> ActionScript 3 按钮),以便 Flash 可以访问与我的 Flex 应用程序的其余部分相同的包。这意味着 SWC 只是我在 Flex 中已有的类的编译版本(因此我什至不必从技术上将 SWC 添加到 Flex 项目中)

他们这样做的另一种方法是在 Flash 中创建资产并分配各种资产虚拟类 - Flash 会自动为您创建这些资产的类。然后将该 SWC 导入您的 Flex 项目。这些资产本身显然只是愚蠢的电影剪辑 - 但您可以编写自己的类来实例化资产并控制它们。

于 2009-06-28T14:33:47.063 回答
2

我一直在尝试自己想出一个好的解决方案。我发现的最佳解决方案是使用装饰器模式,您可以使用一个类来装饰另一个类。假设我想从 flash 中加载一个按钮并将翻转行为封装在按钮中,它可能看起来像这样:

public class AnimatedButton extends Sprite
{
    private var mc:MovieClip;

    public function AnimatedButton( mc:MovieClip )
    {
        this.mc = mc;

        addChild(mc);

        mc.addEventListener(MouseEvent.CLICK, onClick);
        mc.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
        mc.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
    }

    protected function onClick ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("clicked");
        dispatchEvent( event) );
    }

    protected function onRollOver ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("over");
        dispatchEvent( event) );
    }

    protected function onRollOut ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("out");
        dispatchEvent( event );
    }
}

然后当我想将翻转状态添加到按钮时,我会像这样装饰它:

private var btn:AnimatedButton = new AnimatedButton( new FlashButton() );

这基本上创建了具有新装饰功能的按钮。很酷的事情是现在我可以在任何具有“over”“out”和“clicked”框架的按钮上使用它。

于 2009-07-22T02:46:32.767 回答
0

谢谢布兰登。我遇到的一个问题是在使用多帧 Flash 资源时,例如带有 _up、_over 和_down 标签的 MovieClip 按钮以及第一帧上的 stop() 操作。使用嵌入删除任何基于框架的动作脚本。这种情况是否有“最佳”解决方案?

于 2009-06-28T21:05:08.193 回答