Flex 4 - перезагрузка SWF в приложении - PullRequest
0 голосов
/ 13 ноября 2010

Вместо того, чтобы пытаться выяснить, как передать параметры во встроенный SWF-файл, я продолжил работу и сделал 20 SWF-файлов, скомпилированных с разными значениями.Эти SWF-файлы теперь находятся внутри моего приложения Flash Builder.

Для каждого SWF-файла существует состояние (с использованием includeIn), поэтому, когда пользователь нажимает кнопку для переключения состояний, отображается соответствующий SWF-файл.

Проблема в том, что когда пользователь просматривает SWF-файл, он остается загруженным и работает в фоновом режиме.Я хотел бы выгрузить просмотренный SWF-файл, когда пользователь покидает состояние, а затем загрузить его, когда он снова понадобится.Если это невозможно, то я просто соглашусь на перезагрузку SWF при входе в состояние и оставлю остальные 19 запущенными в фоновом режиме.

У меня есть следующее:

<fx:Script><![CDATA[

    private var flashMovie1:MovieClip;
    private var flashMovie2:MovieClip;

    private function initFirst():void{
        flashMovie1 = dmp_first.content as MovieClip;
    }

    private function initSecond():void{
        flashMovie2 = dmp_second.content as MovieClip;
    }

    protected function btnFirst_clickHandler():void
    {
        flashMovie2.Stop();
        currentState='First';
        flashMovie1.Play();
    }

    protected function btnSecond_clickHandler():void
    {
        flashMovie1.Stop();
        currentState='Second';
        flashMovie2.Play();
    }

]]></fx:Script>

<mx:SWFLoader id="dmp_first" includeIn="First" source="assets/images/dmp_first.swf" complete="initFirst()"/>

<mx:SWFLoader id="dmp_second" includeIn="Second" source="assets/images/dmp_second.swf" complete="initSecond()"/>

Несмотря на то, что приведенный выше код вообще не работает с Stop and Play, я все еще не могу понять, как заставить SWF-файл перезагрузиться.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 13 ноября 2010

Вы можете иметь только один SWF одновременно, используя conatiner. Также вам не нужно использовать состояния :), например:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
xmlns:fx    = "http://ns.adobe.com/mxml/2009" 
xmlns:s     = "library://ns.adobe.com/flex/spark" 
xmlns:mx    = "library://ns.adobe.com/flex/mx" 
minWidth    = "955" 
minHeight   = "600">

<s:layout>
    <s:VerticalLayout/>     
</s:layout>

<fx:Script>
    <![CDATA[
        import mx.controls.SWFLoader;

        private function onAppCreationComplete():void
        {
            showSWF(0);
        }

        private function onSwfComboChange():void
        {
            showSWF(cbxSwfData.selectedIndex);
        }

        private function showSWF(index:int):void
        {
            grpContainer.removeAllElements();

            var swfLoader:SWFLoader = new SWFLoader();
            grpContainer.addElement(swfLoader);
            swfLoader.load("assets/swfs_files/swf"+index+".swf");
        }

    ]]>
</fx:Script>

<s:ComboBox
    id                  = "cbxSwfData"
    dataProvider        = "{['swf1','swf2','swf3']}"
    change              = "onSwfComboChange()"/>

<s:Group
    id                  = "grpContainer"
    width               = "50%"
    height              = "50%"/>

</s:Application>
...