2009-07-17 14 views
0

Lassen Sie mich zuerst das Problem darstellen. Ich muss alle Bilder, die ich in meinem Projekt verwendet habe, ohne Einbetten extern laden. Die Bilder sind entweder in Skins oder als Symbole für Objekte in Bäumen vorhanden. Ich stieß auf die IconUtility Klasse here Ich konnte es ändern und es für Bäume verwenden, aber das Problem ist, wir können nicht iconutility für die gleiche Komponente verwenden, um 2 verschiedene Skins (wie für eine Schaltfläche - upskin downskin). Ich konnte nicht an eine Problemumgehung mit iconutility denken. Ist es möglich, Embed und eine Klasse dynamisch zu simulieren und die Klasse zur Laufzeit zurückzugeben?Erstellen einer Klasse dynamisch in ActionScript

+0

Beitrag aktualisiert ... greetz – back2dos

Antwort

0

die einfachste Sache zu verwenden, um diese Dinge zu erreichen, ist ein/mehrere SWF-Dateien erstellen Ihr Vermögen enthalten , laden sie es, und dann die Klassen von dort (dh von der geladenen SWF-Dateien Anwendungsdomäne) herausziehen ...

gibt es mehrere Lösungen, dass:

  • Hardcore-Version ist es, diese Bilder in ByteArray zu laden s benutzen URLLoader, und dann eine neue ByteArray erstellen, die eine SWF-Datei sein wird, die die eingebetteten Assets und die notwendigen Anweisungen enthält, um sie mit Klassen zu verbinden ... Sie könnten einen Blick auf Sparks swfassist ...
  • ein wenig werfen einfachere und performante (da Sie dies nur einmal tun), ist, dass auf dem Server zu tun ... hier Sie
    • einfach die flex compiler
    • Verwendung swfmill
    • verwenden einige Bibliotheken für die Manipulation von sWF verwenden könnte, wie ming
    • do it yourself, von ha nd ... :)

Hoffnung, die

bearbeiten hilft: die zweite Lösung auf dem Server ist über das Erstellen von Vermögenswerten, mit einem geeigneten Werkzeug ... oder Codierung das Werkzeug selbst, aber das war eher ein Scherz ... :) ... mir wurde klar, dass die Verbindung zum Flex-Compiler falsch war ... die Idee wäre, sie einfach in deinen Webserver zu stecken und dann ActionScript zu kompilieren, das macht die Einbettung ... also würde man eine ActionScript-Datei wie diese erzeugen:

package { 
    import flash.display.Sprite; 
    import flash.utils.describeType; 
    public class Assets extends Sprite { 
     [Embed(source='asset_1_Location')] 
     public static var asset_1:Class; 
     [Embed(source='asset_2_Location')] 
     public static var asset_2:Class; 
     ... 
     [Embed(source='asset_n_Location')] 
     public static var asset_n:Class;  
     public function Assets() { } 
     public static function getAll():Object { 
      var ret:Object = { }; 
      for each (var x:XML in describeType(Assets).variable.(@type=="Class")) { 
       var name:String = [email protected]; 
       ret[name] = Assets[name]; 
      } 
      return ret; 
     } 
    } 
} 

Dann lassen Sie den Flex-Compiler kompilieren ... wenn geladen, extrahieren Sie Daten mit LoaderInfo :: applicationDomain.getDefinition ("Assets"). GetAll(), was Ihnen eine Schlüssel-Wert-Zuordnung mit allen benötigten Klassen gibt. ..

mit anderen Werkzeugen, wäre es anders funktionieren, aber ich hoffe, dass dies verdeutlicht, wie es funktionieren soll ...

auf dem Server, benötigen Sie einen Dienst, die diese Anlage swfs für Sie bauen, und cache sie ... also schickst du eine POST-Anfrage, zum Beispiel mit einem JSON-Array von Dateien/Bildern, die du brauchst, und es gibt dir den swf zurück ... der Server sollte natürlich das passende Caching machen ...

hoffe, jetzt hilft es ...:)

greetz

back2dos

+0

Danke für das Feedback. Erste Lösung ist wirklich Hardcore und ich kann die 2. Lösung nicht verstehen. Kannst du es im Detail erklären? – dante

0

This war das, was ich gesucht habe ... leider ist der Autor behauptet, dass er nicht in der Lage war Haut für Knopf

Verwandte Themen