我怎么知道.swf中有哪些符号可用?

时间:2011-07-10 22:35:12

标签: flash flex actionscript air

我对Flash Professional一无所知,但是朋友给了我一个.swf,据说包含了一些他想要导入Flex程序的图形 - 我对此有所了解。

我有.swf,但我不知道该为“符号”添加什么。我的朋友似乎不知道我在说什么。如何确定要嵌入嵌入的第二个参数的符号名称?

[Embed(source='SomeSwf.swf', symbol='WhatGoesHere??')]

有没有办法浏览.swf,或者某种方式只是导入整个内容并逐步执行actionscript中的符号?

提前致谢。

4 个答案:

答案 0 :(得分:3)

您应该将符号的链接名称指定为第二个参数。 要设置链接名称,您的朋友应从“库”面板中选择符号,打开其属性,然后选中“导出for Actionscript”复选框,指定类名(如果需要):

此面板中指定的类名是您应该用于嵌入该对象的第二个参数。发布swf之后,您将能够以这种方式实例化该符号对象:

public class EmbedTest extends Sprite
{
    [Embed (source = "square.swf", symbol="Square")]
    private var swfAsset:Class;

    public function EmbedTest():void    
    {
        var embeddedSwf:*=new swfAsset();
        addChild(DisplayObject(embeddedSwf));
    }
}

<强> UPD1:

  

有没有办法浏览.swf,   或者某种方式来导入整个   事物和步骤通过符号   动作?

您可以尝试以这种方式逐步浏览嵌入式swf的所有舞台上符号:

package
{
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getDefinitionByName;

    [SWF(backgroundColor="#FFFFFF", width="1000", height="400")]
    public class EmbedTest extends Sprite
    {
        [Embed (source = "yourSwf.swf")]
        private var swfAsset:Class; 
        public function EmbedTest()
        {
            super();    
            var embeddedClip:Sprite=new swfAsset() as Sprite;
            var loader:Loader=Loader(embeddedClip.getChildAt(0));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteFunction);
        }

        private function loadCompleteFunction(e:Event):void {
            var loaderInfo:LoaderInfo=e.target as LoaderInfo;
            var content:MovieClip=loaderInfo.loader.content as MovieClip;
            for (var i:int=0; i<content.numChildren; i++) {
                var embeddedMovieClipChild:*=content.getChildAt(i);
                trace (embeddedMovieClipChild.name, embeddedMovieClipChild);
            }
        }
    }
}

<强> UPD2: 还要考虑将资产作为swc文件添加到项目中。 http://blog.geewa.com/post/2009/03/16/Integrating-Flash-Professional-and-Flex-Builder-Using-SWC.aspx

答案 1 :(得分:0)

由于flex嵌入数据的方式,您需要在嵌入时知道符号名称。为此,您需要.fla文件。

如果你只有swf,你可以尝试反编译它以获取名称 - 但是它们需要被链接以便导出(因此它们甚至可能没有它们!)。在这种情况下,您可能希望将其吸入闪存然后命名并标记为自己在另一个swf中导出它们。

麻烦。最好的办法是让你的朋友给你swf,或者给你资产的名字或.fla文件。

=)

答案 2 :(得分:0)

您可以尝试浏览FlashDevelop中的swf,其中包含SWF exploration feature。如果使用FlashDevelop中的Project侧面板导航到swf,则可以打开它以查看其中的类,符号和字体的名称。但是你看到的符号只会是那些具有符号名称的符号;如果它未命名,它可能会得到一个有趣的名称,如instance2143,它不会被列出。

答案 3 :(得分:0)

实际上有一种方法可以动态加载可用定义列表。

有一个名为SWFExplorer的类可以让你这样做。

这里解释了一切:http://www.bytearray.org/?p=175

您需要创建一个项目,创建一个名为“SWFReader”的类,该类可以找出您需要的名称列表。