Случайная генерация источника SWFLoader

Я хочу создать представление во 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>

person user3411128    schedule 07.12.2015    source источник
comment
Действительно ли URL выглядит хорошо? если нет, то поставьте trace("Getting from Array index : " + index ); перед попыткой загрузки. Что вы получаете? Также рассмотрите (только для тестов) размещение этих 3 SWF-файлов в той же папке, что и эта программа SWF (проверьте, не является ли это проблемой пути/доступа к папке), поэтому, если вы можете загрузить maily_you.swf, но не swf/maily_you.swf, тогда вы можете использовать абсолютный URL-адрес (т.е.: полный путь)   -  person VC.One    schedule 08.12.2015


Ответы (1)


В вашем опубликованном коде у вас есть небольшие ошибки:

  1. Если вы хотите, чтобы ваша функция random() устанавливала источник вашего объекта SWFLoader, она должна возвращать URL-адрес SWF, а не использовать его в качестве параметра.
public function random():String 
{
    // ...

    return url;
}

  1. Я знаю, что вы используете объект Loader, может быть, для целей тестирования, но вам это не нужно с объектом SWFLoader.

  1. Чтобы использовать привязываемый источник данных (ваша random() функция) в MXML-код можно использовать:

  • The curly braces ({}) syntax :

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

  • The <fx:Binding> tag :

    <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>
    

    Дополнительную информацию см. в привязке данных.

    Надеюсь, что это может помочь.

    person akmozo    schedule 08.12.2015