我越来越多地使用Flex Builder并尝试在Flex Builder中创建一个相当资产繁重的应用程序。 我知道如何将Flash资产作为SWC发布或导出,以便它们在Flex Builder中可用,但是如果你在Flash中有一个带有帧状态的按钮MovieClip,它可以导出或包含在作为SWC发布的swf中,然后你就可以了想要将在Flexbuilder中创建的Class文件与此SWC资产相关联吗?
我想避免不必要的往返...每次我需要编辑Flash创作的MovieClip类时,我需要编辑类并重新发布或重新导出到SWC,以便在Flex Builder中可用。即我想在Flashbuilder中进行所有编码,同时在Flash中创作图形资源。
答案 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会删除任何基于框架的动作脚本。 对于这种情况,是否有“最佳”解决方案?