Frage

Ich habe eine Flash -Animation (CS5, ActionScript 3) erstellt und sie in SWF konvertiert. Die Flash -Animation benötigt die Werte von 3 Variablen (in der SWF -Zeitleiste definiert), bevor sie in meiner Flex -Anwendung ausgeführt werden. Ich habe die SWF -Datei mit SWFLoader in Flex eingebettet, aber ich muss die Parameter von Flex in Flash übergeben, bevor die Animation startet. Wie mache ich das?

So wie ich mein Flex -Code -Setup unten habe, werden die Variablen nicht aktualisiert. Ich bekomme jedes Mal eine Ausnahme, wenn es zur Funktion von ChangeParams kommt, da es nicht "Typ", "Num1" usw. gefunden wird.

Teil meines Flash -Code:

//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;
}
}

Mein Flexcode:

        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()" />
War es hilfreich?

Lösung 2

Okay, also fand ich heraus, was los war. Wie Anemgyge vorschlug, habe ich meine Funktion geändert, um bei "vollständig" anstelle von "init" zu laufen, aber ChangeParams () lief nie, bis ich aufhörte, den SWF in den SWFloader einzubetten. Ich schätze, ich habe nicht aufgenommen, dass ich es in meinem ursprünglichen Post gemacht habe- mein Fehler. Wenn Sie versuchen, sich in @Embed zu inbetten, wird das "vollständige" Ereignis nicht ausgeführt, wenn Sie es erwarten.

Das andere, was ich tat, war, ein "Gotoandplay (1)" hinzuzufügen, damit es den ersten Frame abspielte, nachdem die Parameter festgelegt worden waren. Wie Anemgyge vorschlug, fügte ich Stop () zu Beginn meines Flash -Codes hinzu, damit er nicht spielt, bis Flex es zu einem Anteil von. Ich verwende Bindungssetzer, um ChangeParams () jederzeit auszuführen, wenn eine meiner Variablen von Flex ändert, sodass die Parameter im Flash SWF aktualisieren und den Film bei Frame 1 starten. Ich freue mich, dies endlich herausgefunden zu haben! :)

Hier ist mein aktualisierter Flex -Code:

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()" />

Andere Tipps

Wenn idAnimation Ist der Instanzname des MovieClip, was am Anfang eingebettet war, und kann dann auch eine gute Methode sein, dass Sie eine Funktion in Ihrem SWF erstellen:

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

     playMe();
}

Auf diese Weise setzen Sie die Parameter sicher und starteten die Animation gleichzeitig. Sie können auch setzen stop(); Vor jedem Code im SWF, um das Spiel zu stoppen.

Sie würden dies also Ihrem Code vor Ihrem Code hinzufügen playMe() Funktion:

stop();

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

     playMe();
}

Würde dies das Problem lösen?

BEARBEITEN

Sie können auch versuchen, sich zu ändern init="changeParams()" zu complete="changeParams();".

Bearbeiten 2

Oder versuchen Sie dies, den SWF in Ihren Flex zu laden. Dies wird es nicht einbetten, wenn Ihre Absicht das war, aber Sie können überprüfen, ob die Funktion gut funktioniert. Und vielleicht kann dies das Problem lösen.

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top