随机生成SWFLoader源码

Randomly generating SWFLoader source

我想在 flex 中创建一个显示随机生成的 swf 的视图。 以下代码可以 运行,但我的 swf 没有显示?如何解决这个问题?

<fx:Script>
    <![CDATA[   
        public function random(url:String):String{
            var movieArray:Array = ['swf/maily_you', 'swf/maily_work', 'swf/maily_start'];
            var loader:Loader = new Loader(); 
            var index:int = movieArray.length * Math.random(); 
            var url:String = movieArray[index] + '.swf'; 
            trace("Attempting to load", url); 
            loader.load(new URLRequest(url));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete); 
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
            addChild(loader); 
            function loaderComplete(e:Event):void {     
                trace("Successfully loaded", url);
            } function loaderIOError(e:IOErrorEvent):void {     
                trace("Failed to load", url); 
            }
    ]]>
</fx:Script>
<s:Panel width="100%" height="100%">
    <mx:SWFLoader  width="480" height="320" id="loader1" source="random()"/> 
</s:Panel>

在你发布的代码中你有一些小错误:

  1. 如果您希望 random() 函数设置 SWFLoader 对象的来源,它应该 return SWF 的 URL 而不是将其用作一个参数。
public function random():String 
{
    // ...

    return url;
}

  1. 我知道您正在使用 Loader 对象,也许出于测试目的,但您不需要使用 SWFLoader 对象。

  1. 要在 MXML 代码中使用 bindable 数据源(您的 random() 函数),您可以使用:

  • 大括号 ({}) 语法:

    <mx:SWFLoader width="480" height="320" id="loader1" source="{random()}"/>
    

  • <fx:Binding> 标签:

    <fx:Binding 
        source="random()"
        destination="loader1.source"
    />
    <mx:SWFLoader  width="480" height="320" id="loader1" source=""/>
    

    所以你的最终代码可以是这样的:

    <fx:Script>
        <![CDATA[   
            public function random():String 
            {
                var movieArray:Array = ['swf/maily_you', 'swf/maily_work', 'swf/maily_start'];
                var loader:Loader = new Loader(); 
                var index:int = movieArray.length * Math.random(); 
                var url:String = movieArray[index] + '.swf'; 
                return url;
            }
        ]]>     
    </fx:Script>
    <s:Panel width="100%" height="100%">
        <mx:SWFLoader  width="480" height="320" id="loader1" source="random()"/> 
    </s:Panel>
    

    有关更多信息,请查看 data binding

    希望能帮到你。