ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
1504
1504
EMPFEHLEN
-
Moin,
ich habe ein Flash-Projekt (Flash 8), welches externe Daten läd und verarbeitet (skaliert).
Wenn ich das ganze mit nem Flashplayer starte ist alles wunderbar.
Integrier ich aber diese SWF-Datei in ein Airprojekt (ich brauch die Dateizugrifffunktion von Adobe Air) wird zwar wunderbar die SWF-Datei geladen und alle Daten sind verfügbar, aber die Daten werden nicht skaliert.
Konkret geht es darum, das in Flash eine Karte mit 2600x2816 Pixeln auf Bildschirmgröße skaliert wird, während in Air nur die linke obere Ecke (halt 0,0) von der Karte zu sehen ist.
Der Code in der Air-Datei sieht so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
//importieren der JPGEncoderklasse import com.adobe.images.JPGEncoder; //importieren der nötigen Adobe AIR Pakete import flash.filesystem.File; import flash.filesystem.FileStream; import flash.filesystem.FileMode; //Zählervariable wird initialisiert var count:int = 0; //Listener für den Savebutton ruft die Funktion save auf btn_export.addEventListener(MouseEvent.CLICK, save); function save(e:MouseEvent) : void{ //legt die Qualität der Bilder fest var myJpgEncoder = new JPGEncoder(100); //neues Objekt mit den Abmaßen der späteren Bilder var bmd:BitmapData = new BitmapData(1024,768); //zeichnen des Objektes (hier root, also die komplette Bühne) bmd.draw(root); //enkodieren des Bildobjektes var ba = myJpgEncoder.encode(bmd); //Erstellen einer Datei auf dem Desktop im Ordner Export, Dateien werden durchnummeriert var file:File = File.desktopDirectory.resolvePath("Export/pic" + count++ +".jpg"); //Ordner wird erstellt var dir:File = File.desktopDirectory.resolvePath("Export/"); //Falls Ordner noch nicht existiert wird er erstellt if(!dir.exists){ dir.createDirectory(); } //neues Streamingobjekt wird erstellt var fileStream:FileStream = new FileStream(); //Stream wird geöffnet im Schreibmodus fileStream.open(file, FileMode.WRITE); //Daten werden geschrieben fileStream.writeBytes(ba); //Stream wird geschlossen fileStream.close(); } //Adresse des zu ladenden Flashfilms wird festgelegt var request:URLRequest = new URLRequest("./Kartenfilm.swf"); //neues Ladeobjekt wird erstellt var loader:Loader = new Loader(); //Flashfilm wird geladen loader.load(request); //Objekt wird hinzugefügt addChild(loader); //wechseln der Ebenen, damit der Button zum speichern über dem geladenen Flashfilm liegt swapChildren(loader,btn_export);
Kann es sein, dass es Probleme gibt, weil die SWF-Datei in Flash 8 und Air neuer ist?
Ben
-
Skalieren funktioniert insofern, dass ich mit "LocalConnection" arbeite und somit auf die Funktionen des geladenen SWF zugreifen kann.
In Air sieht der Code so aus:
Code :1 2 3 4 5 6 7 8 9
//localconnection wird erstellt var AVM_lc:LocalConnection = new LocalConnection(); //die localconnection sendet das ziel und die auszuführende funktion AVM_lc.send("AVM2toAVM1", "saveautoplay"); // loader wird erstellt var loader:Loader = new Loader(); //Adresse des zu ladenden Flashfilms wird festgelegt loader.load(new URLRequest("externe_swf_mit_flash8_erstellt.swf")); addChild(loader);
Damit ich dann die Funktionen aus dem importierten swf bekomme brauch ich auch Code in der swf-Datei:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// localconnection wird erstellt var AVM_lc:LocalConnection = new LocalConnection(); // spielt automatisch die zeitschritte ab AVM_lc.saveautoplay = function(){ saveautoplay(); legendeeinblenden(); } //skaliert mc_bilder nachträglich in air AVM_lc.skalieren = function(){ _root.mc_bilder._xscale = 29; _root.mc_bilder._yscale = 29; _root.mc_bilder._x = 120; _root.mc_bilder._y = 0; } // wartet auf verbindung von "AVM2toAVM1" AVM_lc.connect("AVM2toAVM1");
Das funktioniert also soweit.
Nun habe ich aber auch noch dynamische Buttons die auf die Fläche um den jeweiligen Button skalieren wenn ich drauf drücke. Im original SWF geht das ohne Probleme. In Air natürlich nicht. Beim Zoomen verwende ich unter anderem "this._x". Diese Definition kann aber leider nicht mit Air umgesetzt werden. Der Code in AS2 sieht so aus:
Wenn ich das this._x bzw. _y mit entsprechender absoluter Definition ersetze, nimmt Flash immer den gleichen Wert. Ich vermute vom letzten Button. Daher zoomt der immer auf die gleiche Stelle.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
this.onEnterFrame = function(){ for(i=0;i<XMLsublocation_name.length;i++){ this.mc_bilder.mc_hintergrundkarte.mc_layer_sublocations["btn_sl_"+XMLsublocation_name[i]].onPress = function(){ subloczoom = true; //skalieren des MovieClips _root.mc_bilder._xscale = 500; _root.mc_bilder._yscale = 500; _root.mc_bilder._x = Stage.width/2-this._x*6; _root.mc_bilder._y = Stage.height/2-this._y*6; //Panel zum bewegen im gezoomten Modus _root.mc_zoom_move._visible = true; } } }
Ich bekomme aber auch innerhalb der onPress Funktion nicht den jeweiligen "i-Wert", so dass ich zum Beispiel x und y vorher in einem Array speichern und so darauf zugreifen könnte.
Hat wer von euch ne Idee, wie ich das umgehen kann?
Ben
-
Auch das Problem ist gelöst...
Hab über den Namen des jeweiligen Buttons auf ein Array mit x und y Wert zugreifen können. Damit kann ich nun auch entpsrechend an mein Ziel zoomen.
Ben
Ähnliche Themen
-
Random-Animation für Skalierung eines Lichts (Flackern)?
Von EssiMonster im Forum Cinema 4DAntworten: 3Letzter Beitrag: 15.10.10, 15:43 -
Skalierung eines MovieClips
Von msw im Forum Flash PlattformAntworten: 5Letzter Beitrag: 29.10.07, 11:07 -
Skalierung
Von chickenwings im Forum CSSAntworten: 1Letzter Beitrag: 29.08.06, 17:07 -
Umgebung verschiebt sich bei Skalierung eines Objektes
Von NoGFX im Forum Flash PlattformAntworten: 1Letzter Beitrag: 06.06.06, 23:13 -
Skalierung
Von devStorm im Forum PhotoshopAntworten: 13Letzter Beitrag: 17.06.04, 19:38





Zitieren
Login





