Fisix Vector-Class collides with Flex SDK 4.0

Donnerstag, 6. Mai 2010 14:51

I played around with the Fisix Engine in Flash Builder 4 recently, but as i tried to create a Vector, this Error showed up:

1067: Implicit coercion of a value of type __AS3__.vec:Vector to an unrelated type com.fileitup.fisixengine.core:Vector.

The Problem seems to be, that the new SDK provides an own Vector-Class that collides with the Fisix-Vector-Class. Since i didn’t need to use the new SDK, switching to SDK 3.5 (Project -> Properties -> ActionsScript Compiler -> Flex SDK Version) made it work.

Thema: ActionScript 3, Flash Builder | Kommentare (0)

Prüfen ob XML Element / Eigenschaft enthält

Donnerstag, 29. April 2010 13:23

Neulich wollte ich in Abhängigkeit der Existenz einer XML-Eigenschaft verzweigen. Es hat sich herausgestellt, dass

1
if (xml.meinElement) { machIrgendwas() };

nicht geht weil das immer »true« ergibt. Richtig geht es so:

1
if (xml.hasOwnProperty("xml.meinElement")) { machIrgendwas() };

Thema: ActionScript 3 | Kommentare (0)

Extend Array mit FlexBuilder 3

Mittwoch, 4. November 2009 15:24

Wer mit FlexBuilder 3 eine ActionScript-Klasse anlegt und als Superklasse ‘Array’ auswählt wird feststellen, dass die so erzeugt Klasse erstmal nur eine Fehlermeldung erzeugt: Eigenschaft 0 für de.maxkunz.project.MyClass nicht gefunden und es ist kein Standardwert vorhanden.

Ein Blick in die Dokumentation erhellt das Problem:

You can extend the Array class and override or add methods. However, you must specify the subclass as dynamic or you will lose the ability to store data in an array.

Schade dass FlexBuilder nicht von selbst drauf kommt…

Thema: Allgemein | Kommentare (0)

Custom Events mit Flex Custom UIComponents

Freitag, 25. September 2009 19:48

In diesem Beitrag geht darum, eigene UIComponents mit eigenen Events auszustatten und diese in anderen Komponenten via mx:MetaData verfügbar zu machen.

Im gezeigten Beispiel wird dazu…
1) die Event-Klasse erweitert um eigene Events zu erzeugen. (MyEvent.as)
2) eine eigene UIComponent, basierend auf mx:Canvas, erzeugt die das Event auslöst. (MyUIComponent.mxml)
3) eine Anwendung erstellt, die die Events empfängt und verarbeitet. (Application.mxml)

1) MyEvent.as:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package de.maxkunz
{
    import flash.events.Event;

    public class MyEvent extends Event
    {
        public static const SOME_EVENT_HAPPEND : String = "someEventHappend";
       
        public static const ANOTHER_EVENT_HAPPEND : String = "anotherEventHappend";
       
        public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
       
    }
}

2) MyUIComponent.mxml:

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
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
    <mx:Script>
        <![CDATA[
            private function handleClick (event:MouseEvent) : void
            {
                switch (event.target)
                {
                    case someButton:
                        dispatchEvent(new MyEvent(MyEvent.SOME_EVENT_HAPPEND));
                    break;
                    case anotherButton:
                        dispatchEvent(new MyEvent(MyEvent.ANOTHER_EVENT_HAPPEND));
                    break;
                    default:
                    break;
                }
            }
        ]]>
    </mx:Script>
   
    <mx:Metadata>
        //  wichtig ist hier, die Namensgleichheit mit dem Event zu beachten, siehe MyEvent.as
        [Event(name="someEventHappend", type="de.maxkunz.MyEvent")]
    </mx:Metadata>
   
    <mx:Metadata>
        [Event(name="anotherEventHappend", type="de.maxkunz.MyEvent")]
    </mx:Metadata>
   
    <mx:Button label="Some Event" id="someButton" click="handleClick(event)" x="10" y="10" />
    <mx:Button label="Another Event" id="anotherButton" click="handleClick(event)" x="10" y="50" />
   
</mx:Canvas>

3) Application.mxml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:max="de.maxkunz.*" width="600" height="500">
   
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import de.maxkunz.MyEvent;
           
            private function handleSomeEvent (event:MyEvent) : void
            {
                Alert.show("Some event handled.");
            }
           
            private function handleAnotherEvent (event:MyEvent) : void
            {
                Alert.show("Another event handled.");
            }
        ]]>
    </mx:Script>
   
    <max:MyUIComponent someEventHappend="handleSomeEvent(event)" anotherEventHappend="handleAnotherEvent(event)" />
</mx:Application>

Das praktische an dieser Vorgehensweise ist, dass man nun in Flex den Eventhandler einfach mit dem Eventnamen direkt an der Komponente registrieren kann, wie das auch bei den von Adobe eingbauten Events der Falls ist.

Hier gibts die Dateien zum Download.

Thema: ActionScript 3, Flex Builder | Kommentare (0)

Flash und Netbook

Dienstag, 11. August 2009 22:38

Geht das?

Ja, das geht, aber…

Coden
Ich konnte nicht wiederstehen, deshalb bin ich jetzt Besitzer eines Netbooks, schön mit 2 GB RAM, 11.4″ bei 1366×768 Auflösung und 1.4 Kg leicht.

Also flux FlexBuilder3 installiert und testweise ein paar Zeilen gecodet.

Das geht, eingedenkt der Umstände (Netbook: Atom Z530, 1.33GHz; FlexBuilder3 Mindestvoraussetzung laut Adobe: Pentium4), überraschend flott bedenkt man, dass FlexBuilder eh nicht der schnellsten einer ist.

Testprojekt: PV3D-Globus

Testprojekt: PV3D-Globus

Das Testprojekt braucht, vom Klick auf den Debug-Button bis es im bereits geöffneten Firefox angezeigt wird, 3.8 Sekunden. Natürlich wurde das Projekt vorher »gecleant«. Ich hätte vermutet, dass es viel länger dauern würde oder vielleicht sogar garnicht möglich wäre.

Ich erspare mir daher den Vergleich mit einer zur ActionScript-Entwicklung geeigneten Hardware.

Der »Haken« ist, mal davon abgesehen, dass man eh nicht in die Verlegenheit geräten möchte, ernsthaft Flash auf einem Netbook zu entwickeln, in der Natur des Netbooks begründet: die geringe Bildschirmgröße in Verbindung mit der hohen Auflösung von rund 140 DPI sorgt nach ‘ner Stunde tippen für Kopfweh.

Aber für eine Runde AS um einen neuen Blogeintrag zu schreiben reicht es allemal.

Browsen
Natürlich wollte ich auch wissen, wie sich Flashanwendungen auf dem Netbook machen. Auch hier war ich überrascht, wie gut das Netbook mit den ihm gestellten Aufgaben zurecht kam.

Neben eigenen, u.a. PV3D/Away3D lastigen Seiten, liefen auch die meisten anderen flashlastigen (3D-) Seiten durchweg flüssig. Ecodazoo.com benötigte durchschnittlich 62% der Prozessorleistung, in der Spitze zeigte der Windows Taskmanager 72% Prozessorauslastung an. Aktuellere Seiten wie die Baileys Lounge gerieten allerdings zur Slideshow. (Obwohl hier die Prozessorleistung nie über 80% ging.)

Fazit: Mit dem Netbook als Unterwegscomputer bin ich vollauf zufrieden. Mein Laptop (R.I.P.) fiel mir häufig zur Last weil zu schwer und zu groß. Und richtig zum Arbeiten hat der auch nicht getaugt.

Thema: ActionScript 3, Allgemein, Anderes Zeugs, Flex Builder, PaperVision3D | Kommentare (0)

TextField und Filter: Buchstaben umranden

Mittwoch, 29. Juli 2009 17:04

Soll jede Type eines Textfeldes mit einer Outline versehen werden, kann man das mittels eines GlowFilters erreichen.

1
2
3
4
5
var outlineFilter : GlowFilter = new GlowFilter(0xff0000, 1, 2, 2, 22, 1);
var textField : TextField = new TextField();
textField.text = "Hogla Bogla!";
textField.filters = [outlineFilter];
addChild (textField);

Der »Trick« besteht darin, die Stärke des Glowfilters (Wertebereich 0-255) so hoch zu sezten, dass er nicht mehr als Schein, sondern als gefüllte Linie erscheint. Mit den Parametern blurX und blurY läßt sich die Dicke der Linie verändern. Für gute Resultate ein bischen mit Schriftgröße und vorgenannten Parametern experimentieren…

Type-Outlines mit GlowFilter

Type-Outlines mit GlowFilter

Thema: ActionScript 3 | Kommentare (1)

BitmapData »löschen«

Mittwoch, 15. Juli 2009 15:48

Um eine BitmapData, die man zuvor beispielsweise mit bitmapData.draw() befüllt hat, zu löschen, also die Pixel in der BitmapData wieder loszuwerden, kann man die fillRect()-Methode verwenden um die besthenden Pixel mit 0 zu überschreiben.

1
myBitmapData.fillRect(myBitmapData.rect, 0);

Die BitmapData ist danach wie neu und enthält keine Bilddaten mehr.

Damit die BitmapData ganz aus dem Speicher verbannt wird, also auch das BitmapData-Objekt gelöscht wird, benutzt man dispose().

1
myBitmapData.dispose();

Thema: ActionScript 3 | Kommentare (0)

Unix Timecode / Timestamp in AS3

Dienstag, 23. Juni 2009 18:52

Um in AS3 ein Datum in ein Unix Timecode zu wandeln, teilt man das die Rückgabe von getTime() durch 1000.

1
2
var date:Date = new Date();
var unixTimeCode:int = Math.round ( date.getTime() / 1000);

Die Date.getTime() Methode gibt die Millisekunden die seit dem 1. Januar 1970 und dem betreffenden Datum vergangen sind zurück. Da eine Unix Timestamp den gleichen Zeitraum aber in Sekunden repräsentiert, muss hier nocheinmal durch 1000 geteilt werden.

Thema: ActionScript 3 | Kommentare (0)

Dynamische Textfelder und Alpha / Transparenz

Mittwoch, 20. Mai 2009 11:36

Bei dynamischen Textfeldern die keine einegebetteten Fonts benutzen kann man die Transparenz nicht ändern, auch nicht wenn das Textfeld in der DisplayList eines Sprites hängt und man die Transparenz des Sprites ändert (auch nicht wenn man das Sprite als Bitmap cached).

Funktioniert nicht:

1
2
3
4
5
6
7
8
var myTextField:TextField = new TextField();
myTextField.text = "Hogla Bogla!";

var mySprite:Sprite = new Sprite();
mySprite.addChild(myTextField);
mySprite.alpha = 0.5;

addChild(mySprite);

Wenn man aber Bytes sparen will / muss und nicht den Font in die Library einbetten möchte, kann man den BlendMode des Sprites auf »Layer« setzten.

Funktioniert:

1
2
3
4
5
6
7
8
9
var myTextField:TextField = new TextField();
myTextField.text = "Hogla Bogla!";

var mySprite:Sprite = new Sprite();
mySprite.addChild(myTextField);
mySprite.blendMode = BlendMode.LAYER;
mySprite.alpha = 0.5;

addChild(mySprite);

Gegebenenfalls muss man noch ein »import flash.display.BlendMode« erfolgen lassen.

Thema: ActionScript 3 | Kommentare (4)

SWF-Ressourcen Monitor »Hi-ReS! Stats«

Montag, 18. Mai 2009 13:07

Um die Framerate und den Speicherverbrauch einer SWF zu überwachen gibt es eine feine AS3-Klasse von Mr. Doob.

Ausser Framerate und aktuellem Speicherverbrauch werden die Millisekunden, die der Flashplayer braucht um ein Frame zu rendern, und der maximale Speicherverbrauch angezeigt.

Ausserdem kann man die maximal darzustellende Framerate des SWF per Mausklick verändern.

Thema: ActionScript 3 | Kommentare (0)