Могу ли я передать параметры в Flex 3 к переменным в файле SWF с помощью SWFLOADER?

StackOverflow https://stackoverflow.com/questions/5821382

Вопрос

Я создал флэш -анимацию (CS5, ActionScript 3) и преобразовал ее в SWF. Флэш -анимация нуждается в значениях 3 переменных (определенных на временной шкале SWF), прежде чем она начнет работать в моем приложении Flex. Я встроил файл SWF, используя загрузку SWF в Flex, но мне нужно передать параметры из Flex в Flash до начала анимации. Как мне это сделать?

То, как у меня есть настройка кода Flex ниже, переменные не обновляются. Я получаю исключение каждый раз, когда он попадает на функцию ChangeParams, потому что она не может найти «тип», «num1» и т. Д.

Часть моего кода Flash:

//These 3 variables need to be populated via Flex BEFORE the animation starts...
var Num2:int;
var Num1:int;
var Type:String;

var whichNumber:int;
var frameNumber:int;

function playMe():void {
switch (Type) {
    case 'type1':
        gotoAndPlay(16);
        break;
    case 'type2':
        frameNumber = 27;
        whichNumber = 1;
        gotoAndPlay(frameNumber);
        break;
    case 'type3':
        frameNumber = 29;
        whichNumber = 1;
        gotoAndPlay(17);
        break;
    case 'type4':
        whichNumber = 1;
        break;
}
}

Мой гибкий код:

        public function changeParams():void {
            idAnimation.content["Type"] = 'type1';
            idAnimation.content["Num1"] = 6;
            idAnimation.content["Num2"] = 30;
            trace ("Type= " + idAnimation.content["Type"]);
            trace ("Num1= " + idAnimation.content["Num1"]);
            trace ("Num2= " + idAnimation.content["Num2"]);
        }
    ]]>
</mx:Script>

<mx:SWFLoader id="idAnimation" source="animation.swf" init="changeParams()" />
Это было полезно?

Решение 2

Итак, я узнал, что случилось. Как предложил Anemgyenge, я изменил свою функцию, чтобы запустить «Полный» вместо «init», но changeparams () никогда не бегал, пока не перестал пытаться встраивать SWF в SWF -загрузчик. Думаю, я не включил так, как я делал это в своей первоначальной пост- моей ошибке. Если вы попытаетесь встроить @Embed, он не запускает «полное» событие, когда вы ожидаете.

Другая вещь, которую я сделал, - это добавить «gotoandplay (1)», чтобы он сыграл первый кадр после того, как параметры были установлены. Как предложил Anemgyenge, я добавил Stop () в начало моего кода флэш -кода, чтобы он не играл, пока Flex не скажет это. Я использую сеттеры привязки, чтобы запустить changeParams () в любое время, когда одна из моих переменных из Flex Change, поэтому параметры обновляются во Flash SWF и запускают фильм на кадре 1. Настолько рад, что наконец -то это выяснили! :)

Вот мой обновленный гибкий код:

public function changeParams():void {
      if (idAnimation.content != null) {
        idAnimation.content["Type"] = myString;
        idAnimation.content["Num1"] = myNum1;
        idAnimation.content["Num2"] = myNum2;
        MovieClip(idAnimation.content).gotoAndPlay(1);
        trace ("Type= " + idAnimation.content["Type"]);
        trace ("Num1= " + idAnimation.content["Num1"]);
        trace ("Num2= " + idAnimation.content["Num2"]);
      }
    }
]]>
</mx:Script>

<mx:SWFLoader id="idAnimation" source="assets/animation.swf" complete="changeParams()" />

Другие советы

Если idAnimation Является ли имя экземпляра MoveieClip, что было встроено в начале, тогда это также может быть хорошим методом, который вы создаете функцию в своем SWF:

function setParamsAndAutoplay(value1:*, value2:*, vlaue3:*):void
{
     Num2 = value1;
     Num1 = value2;
     Type = value3;

     playMe();
}

Таким образом, вы наверняка устанавливаете параметры и одновременно запустили анимацию. Вы также можете положить stop(); Перед каждым кодом в SWF для остановки игры.

Таким образом, вы добавите это в свой код, прежде чем ваш playMe() Функция:

stop();

function setParamsAndAutoplay(value1:*, value2:*, vlaue3:*):void
{
     Num2 = value1;
     Num1 = value2;
     Type = value3;

     playMe();
}

Решить это проблему?

РЕДАКТИРОВАТЬ

Также вы можете попытаться изменить init="changeParams()" к complete="changeParams();".

Редактировать 2

Или попробуйте это, чтобы загрузить SWF в свой гибкий. Это не внедрит это, если вы намерены было, но вы можете проверить, работает ли функция нормально. И, возможно, это может решить проблему.

var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener("complete", ldrDone);
ldr.load(new URLRequest("your-swf-file"));

function ldrDone(evt:*):void
{
    var movie:MovieClip = MovieClip(evt.target.content);
    movie.setParams(0, 1, 2);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top