tyclipso.net

am Schillerplatz
Hüblerstrasse 1
01309 Dresden

Fon 0351-3122303
Fax 0351-3122304

Fon/Fax
0700-TYCLIPSO
0700-89254776

  • Denis Bartelt
  • Frank Hönisch
  • Cathleen Knohf
  • Konrad Hahn
  • Michael Betka
  • Ron Kappler
  • Conrad Gerlach
  • Ricardo Schmidt
  • Mike Reiche
  • Pavel Kovtunov
  • Jörg Schwentesius
  • Claudia Fehrenbach
  • Mario Nitschke
  • Tim Natzschka
hol Dir unsere Meinung...

Angst vor Social Media

"Viele Führungsetagen haben große Angst und eine falsches Verständnis für den fortschreitenden Erfolg von Social Media. Es gehört nicht zu unseren Aufgaben Menschen zu bekehren, allerdings sollten Manager ohne Akzeptanz zur Thematik Kompetenzen abgeben!"
Denis Bartelt

  • 07.07.2009

    MovieClips in AS3 einfärben  

    In der Flash IDE gibt es eine  Funktion zum Einfärben eines MovieClips bzw. einer DisplayObject-kompatiblen Instanz. In ActionScript wird dies über ColorTransform geregelt, allerdings ist die Abbildung dieser Einfärben-Funktion nicht intuitiv.

    Erstaunlicherweise findet man relativ wenig konkrete Informationen dazu im Internet, deshalb hier eine schmale und kurze Lösung, welches Einfärben über ColorTransform regelt.

    function tint(mc:MovieClip, color:Number, percent:Number):void {
            var ct:ColorTransform = new ColorTransform();
            ct.color = color;
            ct.redOffset *= percent;
            ct.greenOffset *= percent;
            ct.blueOffset *= percent;
            ct.redMultiplier = 1-(ct.redOffset/255);
            ct.greenMultiplier = 1-(ct.greenOffset/255);
            ct.blueMultiplier = 1-(ct.blueOffset/255);
            mc.transform.colorTransform = ct;
    }
    
  • 13.01.2008

    MovieClip Management

    Im Laufe der Entwicklungen an der LDIC-Offline-Präsentation bin ich auf einen Fehler in der Flash-IDE gestoßen, der mir so manche aufregende Stunden bereitet hat. Grund dafür war ein unerklärliches Phänomen, das die CPU-Last einer als Windows-Projektor exportierten Flash-Animation mit jedem Szenenwechsel Stück für Stück ansteigen ließ und den verwenden Host-Rechner bis an seine Grenzen trieb.

    Das besonders Unerklärliche war, dass nur der Projektor von diesem Phänom betroffen war, die zu Grunde liegende Shockwave-Datei blieb davon unberührt wie dieses Bildschirmfoto beweist: Bug in Flash-Projekt lässt die CPU-Last steigen

    Zu sehen ist die selbe Anwendung mit unterschiedlichen CPU-Auslastungen nach 5 aufgerufenen Seiten. Einmal als SWF im Standalone-Flashplayer (unten) und einmal als Projektor (oben).

    Nach einer Reihe von Versuchen bin ich dann dahinter gekommen: Mit der Loader-Klasse geladene SWF-Dateien laufen auch nach vermeintlichem Entfernen im Hintergrund weiter. Der Garbage-Collector wird daran gehindert, den MovieClip und sein Eltern-Loader-Objekt aufzuräumen und aus dem Speicher zu entfernen.
    Bestätigung für diesen Fehler fand ich auf dieser Seite "Garbage collector troubles using the loader class".

    Weitere Nachforschungen ergaben, dass in AS3-exportiere (also in der selben Version wie die Host-Anwendung), SWFs dieses Problem nicht besaßen, zumindest nicht ganz so gravierend.
    Mit einem Umschreiben (neu exportieren) der einzuladenden SWF in AS3 war das Problem minimiert, jedoch nicht ganz gelöst. Nun lief die CPU-Last nicht mehr bis über 90% an, dafür konnte man jedoch sehen, dass weiterhin ein Prozess im Hintergrund lief.
    Ursache dafür sind in der SWF definierte EventListener und Interval-Aufrufe. Der GarbageCollector kann keine MovieClips entfernen die solche definiert haben. Damit es funktioniert, müssen diese manuell entfernt werden. Da ich die einzuladende SWF jedoch nicht von außen steuern wollte, behalf ich mir mit einem Trick innerhalb ihrer Hauptprozedur.

    public function Constructor() {
        // Starte Zufallsgenerator der Balken
        interval1 = setInterval(zufallPeak, 1100);
        interval2 = setInterval(zufallPeak, 1639);
        // Starte Dekorationsanimation
        addEventListener(Event.ENTER_FRAME, runDecoration);
    }

    private function runDecoration(ev:Event):void {
        if (stage == null) removeMe();
    }

    private function removeMe():void {
        trace("remove Me");
        removeEventListener(Event.ENTER_FRAME, runDecoration);
        clearInterval(interval1);
        clearInterval(interval2);
    }

    Beim Entfernen des MovieClips mittels removeChild() aus der Anzeigeliste werden dessen Zeiger parent und stage auf NULL gesetzt. Auch wenn der Interval-Handler zufallPeak weiterläuft, das Objekt also nicht vollständig entfernt werden kann. Dieses Beispiel prüft in jedem ENTER_FRAME-Event, ob der Zeiger auf die Bühne noch existiert. Wenn nicht, werden die Intervalle beendet und Event-Handler entfernt. Das MovieClip kann nun vollständig vom GarbageCollector aufgeräumt werden, der Speicher wird frei und die CPU-Last bleibt niedrig.

tyclipso.net ist

RKW Berater auch für ihre Projekte zur Prozess-Optimierung im Unternehmen

Mitglied bei den Wirtschafts Junioren Dresden

Kontakt

tyclipso.net
am Schillerplatz
Hüblerstrasse 1
01309 Dresden

Fon 0351-3122303
Fax 0351-3122304

Fon/Fax
0700-TYCLIPSO
0700-89254776

Partnernetzwerk

Unser Agentur-Netzwerk besteht aus 25 Agenturen deutschlandweit.

eigene Projekte

Das Projekt startnext.de ist eine Crowdfunding-Plattform die Projek-tinitiatoren und Unterstützer zusammen-bringt.