如何将链接的SWC MovieClip资产与FlexBuilder Actionscript项目中的类相关联

时间:2009-06-27 19:35:52

标签: flash actionscript-3 flexbuilder swc

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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”框架的按钮上使用它。

答案 2 :(得分:0)

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