import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.net.URLRequest; // Pfad zum Objekt, was geladen werden soll (relativ) var url:String = "/pic/meinBild.jpg"; var reg:URLRequest = new URLRequest(url); var myLoader:Loader = new Loader(); // EventListener // Wird ausgeloest, wenn das Bild fertig geladen ist myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig); // Wird ausgeloest, wenn ein Fehler aufgetreten ist myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, fehler); // Wird ausgeloest, während des Ladens myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, update); // Ladevorgang starten myLoader.load(reg); function fertig(e:Event):void{ // Inhalt der Stage hinzufügen this.addChild(myLoader); // oder this.addChild(e.currentTarget.content); } function fehler(e:IOErrorEvent):void{ trace("Es ist ein Fehler aufgetreten: " + e); } function update(e:ProgressEvent):void{ var total:Number = e.bytesTotal; var loaded:Number = e.bytesLoaded; var percent:Number = Math.floor((loaded*100)/total); // Ausgabe während des Ladens trace("Es wurden " + loaded + "Bytes von " + total +" Bytes geladen. Also " + percent + "%"); }
Eine Funktion rufen:
import flash.external.ExternalInterface; ... ExternalInterface.call('deine_javascript_funktion()');
Eine Funktion mit Rückgabewert rufen:
var x:int = ExternalInterface.call('get_x()');
Eine Funktion mit Rückgabewert und einem übergebenen Wert rufen:
var x:int = ExternalInterface.call('deine_javascript_funktion()', 'der wert');
einfach oder?
Jeder Entwickler kennt das Thema: “Wie sichere ich meine Anwendung vor Codediebstahl?” oder “Was kann ich gegen Decompiler tun?”. Die Antworten liefern aufwendige Verschlüsslungsalgorithmen (ein schönes HowTo findet ihr hier) oder kostenpflichtige Programme. Genau diese Programme stelle ich vor:
Logo | Name | Firma | Kosten | Version | Link |
SWF Encrypt | amayeta | 100 € | 6.0 | hier | |
secureSWF | Kindisoft | ab 99 $ (dezimierte Version) |
3.5 | hier | |
OBFU | Motion-Twin | ab 500 € | k.a | hier | |
SWF Protector | DCOMSOFT | 39,95 € | 3.0 | hier |
Weitere Informationen und der genaue Test nach dem break!
Das folgende Beispiel zeigt dir einige Informationen über dein System / Flashplayer an.
Diese Daten können mit Hilfe der Capabilities Klasse ausgelesen werden. Man ruft lediglich die Variablen der Klasse per Getter ab.
package { import flash.system.Capabilities; import flash.display.Sprite; public class info extends Sprite { public function info() { this.a_txt.text = Capabilities.os; this.b_txt.text = Capabilities.version; this.c_txt.text = Capabilities.isDebugger.toString(); this.d_txt.text = new Date().toString(); this.e_txt.text = Capabilities.language; } } }
Viel Spaß!
PS: Nicht die Imports vergessen!
In jedem Flash-Forum findet man 1.000 x mal ein und die selbe Frage: “Wie kann ich einen Movieclip rückwärts abspielen?”. Hier ist die Antwort…
import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.utils.Timer; // Wenn auf "meinAusloeser_btn" geklickt wird, führt er die Funktion "meineFunktion" aus meinAusloeser_btn.addEventListener(MouseEvent.CLICK, meineFunktion); // Variable deklarieren var myTimer:Timer; function meineFunktion(e:MouseEvent) { //Die "40" steht fuer die Verzoegerungszeit und das "meinMC.currentFrame" auf die Anzahl der Wiederholungen myTimer = new Timer(40, meinMC.currentFrame); // Event wird nach jeder Verzoegerung ausgeloest myTimer.addEventListener(TimerEvent.TIMER, rueckwaerts); // Event wird einmal am Ende ausgeloest myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerende); // Timer starten myTimer.start(); } // Diese Funktion wird nach jeder Verzoegerungszeit ausgefuehrt function rueckwaerts(evt:TimerEvent):void { meinMC.gotoAndStop(meinMC.currentFrame-1); } // Diese Funktion wird am Ende(nach dem letzten Durchlauf) ausgefuehrt function timerende(evt:TimerEvent):void { // loescht den MovieClip removeChild(meinMC); }
Fertig^^
Das Problem kennen bestimmt viele von euch… KEINER WEIS, was für Instanzen in der Stage liegen. Besonders ärgerlich ist das, wenn man mehr mit Code als mit der Zeitleiste arbeitet. Instanzen dynamisch zu erzeugen ist leicht, aber wo befindet Sie sich?
Diese Funktion gibt euch alle, wirklich alle Instanzen mit Namen aus. Davor befindet sich der Container, indem sich diese befindet.
ActionScript:
function displayAll(container:DisplayObjectContainer, parent:String):void { var child:DisplayObject; parent = parent + "--->" + container.name; for (var i:uint=0; i < container.numChildren; i++) { child = container.getChildAt(i); if (child is MovieClip) { trace(container.name + "--->" + child.name); } if (child is DisplayObjectContainer) { displayAll(DisplayObjectContainer(child), parent ); } } trace(parent); } // Aufruf displayAll(this, "stage");
Die Funktion wird mit „displayAll(this.stage, „stage“);“ aufgerufen!
bis die Tage
lg Alexander