Blog Archives

as3Utils

Found it on GitHub :-) … It’s a mandatory lib for every as3 developer!

Source Code ->
https://github.com/as3/as3-utils

Well you found many nice top level functions like ->

getPlayerInfo
bytesToKilobytes
fitIntoRect
sendBackward
getChildren

And many many many helpfull functions… It’s in my framework mandatory…

The Holy Grail of AS3 Developer

After 2 years searching by Google/Yahoo/Bing found now my HOLY GRAIL! It’s like a bible for me!

ActionScript Virtual Machine 2 (AVM2) Overview

How to use robotlegs in bubbles

http://d1.scribdassets.com/ScribdViewer.swf?document_id=28269818&access_key=key-12vb8axy1ff9i14o6amz&page=1&viewMode=list

Garbage Collector of Flash

Wie ich hier schon geschrieben habe [Link] Programmiere ich z.Z eine AIR Applikation… Mein jetziges Problem liegt daran das meien Memory andauernd über 1GB bei über 300 Bildern hinnausläuft… Nach mehreren minuten von Suchen in Google fand ich herraus das man einfluss auf den GBC nehmen kann, was sich als ziemlich hilfreich erweißt…

Folgendes muß beachtet werden:

  • nach jeden erstellen von einem Bild setze ich ALLE Variablen auf null die für das erstellen des Bildes benötigt werden
  • useWeakReferences bei addEventlistener auf true gesetzt oder gleich inline functionen erstellen
    • var _onComplete:Function = function(event:Event):void{doSomething();}
      
      _loader.loaderInfo.addEventListener(Event.Complete, _onComplete);
  • und ich habe ein Timer im Hintergrund laufen der alle 3 Minuten den GBC anspricht
    • System.gc();
  • Bei Klassen die mit loading arbeiten IMMER den loader auf null wieder zurückstellen
  • Bei Eventlistener ist es sehr sehr sehr wichtig WENN die Handlerfunktion danach nicht mehr ausgeführt wird, dann sollte man den removen!!!!
  • Das wichtigste ist mit bedacht Programmieren besonders bei Flex und AIR und Componenten unheimlich viel Memory Speicher
  • Das null PLUSULTRA wenn mann schon so ein tool nutzt PROFILING
    • Flaschenhälse (Bottleneck) herrausfinden
    • Lokalisieren
    • Fixen ;)
  • Es gibt seit ActionScript 3 die Klasee Dictionary, damit kann man via Hashtags auf ein Element zugreifen durch iterieren tut man mit foreach und vor allendingen ist es schneller als das Array

Fazit:

Es reicht eigentlich wenn man bei große Prozesse wie Laden von Files danach immer den Loader auf null setzt bzw. bei dynamischen Inhalten kann man auch delete anwenden… Und einen Timer der bei einem bestimmten Zeitinterval den GBC anhaut das er sich mal bewegen soll… Und bei Eventlistener bevorzuge ich inline Functions da diese wenn die Funktion ausgeführt wurde eigentlich sich selbst ‘deleten’…

[UPDATE 11/16/2009]

Logging wiht SOSmax

Ich habe vor einiger Zeit ein sehr schönes Tool entdeckt nennt sich SOSmax von den Powerflashern :)

Ich habe mal 2 Klassen erstellt damit man dieses Tool nutzen kann ist eigentlich ziemlich einfach…

Am anfang eurer Applikation einfach den LoggerController instanziieren…

new LoggerController();

Ihr braucht die Klasse nicht in einer Variable speichern… Die Funktionen die Ihr braucht sind alle static… Um einen simplen Message auszugeben:

LoggerController.logMessage(LoggerKeys.KEY_DEBUG, "LoggerController", "Meine Message");

Um eine Folding Message auszugeben:

LoggerController.logFoldingMessage(LoggerKeys.KEY_DEBUG, "Titel", "LoggerController", "Message");

Download SOSmax

Klassen

get MovieClips from extern SWF

Um aus einer hereingeladenen SWF die verknüpften MovieClips zu bekomme benötigt man einen kleinen Workkarround…

Deshalb habe ich mal einen kleine Funktion geschrieben um das leben einbisschen einfacher zu machen ;)

public static function getMovieClipClassByString( className : String, event : Event ) : MovieClip
{
    var classReference:Class = event.target.applicationDomain.getDefinition(className) as Class;
    var mc:MovieClip = new classReference() as MovieClip;
    if (mc == null)
    {
      new Error("Error!!! MovieClip ist nicht verfügbar...");
    }

    return mc;
}

Als return gibt es dann den MovieClip… target : *, das Sternzeichen bedeutet nichts einfach als eine wildcard ihr könnt alles übergeben war zu faul um Object rein zu schreiben :D … Aufjedenfall ist das was übergeben werden soll:

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, urlLoaderCompleteHandler);
private function urlLoaderCompleteHandler( event : Event ) : void
{
    getMovieClipClassByString(className, event);
}

Download Klasse