Da ich ja zur Zeit hauptsächlich im AS 3 und Flash Universum unterwegs bin, bin ich auf ein paar Bugs (Eigenarten, Features..) von Flash gestoßen, die mir so circa zwei Stunden zusätzliche Arbeit gekostet haben. Es kann sein, dass der eine oder andere Flash-Crack sich müde lächelnd abwendet, aber ich bin im Laufe meiner Programmierzeit immer wieder über Eigenarten von Flash im Umgang mit Textfeldern respektive der TextField-Klasse gestolpert.

Über ein paar möchte ich hier Auskunft geben, um vielleicht dem einem oder anderen bei der Fehlersuche behilflich zu sein.

Fehler: Es wird kein Text angezeigt

Einbetten von Schriften

Denkt daran eure Schriften einzubetten. Wenn ihr dynamisch Textfelder zur Bühne hinzufügt, müssen alle Zeichen eures Zeichensatzes, die ihr benutzen wollt, eingebettet sein. Das macht ihr über den Einbetten-Button, nachdem ihr das dynamische Textfeld auf der Bühne selektiert habt.

einbetten

Im auftauchenden Fenster wählt ihr die Zeichen aus, die ihr benötigen werdet. Vergesst nicht die deutschen Umlaute einzubauen (natürlich nur, wenn es eine deutsche Seite ist). Die sind nämlich in Flashs Auswahl für Groß- und Kleinbuchstaben nicht vorhanden. Ist dann in eurem Text, den ihr dynamisch hinzufügt, ein Umlaut vorhanden, zeigt Flash euren Text nicht an.

einbetten2

Bei vollkommen dynamisch hinzugefügten Textfeldern müsst mit der Eigenschaft

TextField.embedFont = true;

das einbetten von Fonts erlauben und mit der TextFormat-Klasse einen Font definieren.

TextFormat.font = "Verdana";

Weitere Infos im LiveDoc von Adobe zu dem Thema.

Fehler: Trotz einbetten der Glyphen, zeigt Flash keinen Text an

Mitkompilieren des Zeichensatzes

Ihr habt eure Glyphen im Textfeld eingebettet, allerdings wird auf einem anderen Computer kein Text eingezeigt. Hier liegt es meistens daran, dass die Schrift, die ihr verwendet nicht auf dem fremden Computer vorhanden ist. Die Einbetten-Funktion bei Flash ist dabei etwas missverständlich gekennzeichnet. Beim Einbetten bettet ihr nicht die Schrift selber ein, sondern sagt dem Textfeld nur, welche Glyphen im Textfeld dargestellt werden sollen. Ist eure Schrift aber nicht auf dem fremden Computer vorhanden, kann den Flash die passenden Buchstaben nicht mehr darstellen. Deshalb ist es wichtig, dass ihr eure Schriftart in der Bibliothek mitkompiliert.

Das macht ihr über das Kontextmenü der Bibliothek. Hier wählt ihr neue Schriftart.

einbetten3

Im auftauchenden Dialogfenster legt ihr eure Schrift dann an und speichert sie in die Bibliothek. Wichtig: Für jede Größe und Art eurer Schrift, die ihr in eurem Flash verwendet, also zum Beispiel “Webdings”, 16pt und fett und “Webdings”, 14pt und normal, müsst ihr eine eigene Schrift anlegen. Es reicht nicht, einmal “Webdings” in 16pt in die Bibliothek zu importieren.

Der Nachteil an diesem Verfahren ist natürlich, dass der Flashfilm in der Größe wächst. Deshalb sollte genau überlegt werden, welche Glyphen und Schriftarten wirklich benötigt werden.

Fehler: Beim dynamischen Einladen von Texten, werden diese verzerrt oder an falscher Position dargestellt

Sind TextFieldAutoSize-Konstanten gesetzt und der Parent-MovieClip nicht verzerrt

Es ist leider unbedingt von Nöten bei dynamischen Textfeldern die Konstanten der TextFieldAutoSize an das Textfeld zu übergeben. ActionScript 3 setzt den Default-Wert für TextField.autoSize auf NONE, weshalb dieser unbedingt im Quellcode übergeben werden muss, da sich sonst die dynamischen Textfelder nicht an die Größe des übergebenen Textes anpasst. Hierfür sind die Konstanten der Klasse TextFieldAutoSize zuständig (LiveDoc). Folgende Optionen

TextFieldAutoSize.LEFT
TextFieldAutoSize.NONE (default)
TextFieldAutoSize.RIGHT
TextFieldAutoSize.CENTER

sind verfügbar. Dummerweise ist der default-Wert für die Erstellung einer Navigation nicht brauchbar (zumindest war es bei mir so).  Denn mit dem Default-Wert behalten die Textfelder ihre Größe und passen sich nicht an der Inhalt an. Wenn ich nun den Abstand zwischen den Navigationspunkten berechnen will bekomme ich falsche Wert und die Navigationspunkte verschieben sich.

Ein weiteres, nerviges Verhalten ergibt sich, wenn dynamische Textfelder in MovieClips geladen werden, die eine Transformation erfahren haben. Die nachgeladenen Textfelder verzerren ebenfalls und ändern ihre Größe. Falls ihr dieses Problem auch beobachtet, so ist eine Lösung, die Textfelder in einen leeren, frischen MovieClip außerhalb des transformierten Clips zu laden.

Im Großen und Ganz gehört die TextField-Klasse, neben der Tween-Klasse, zu den Klassen, die mir am meisten Probleme bereitet haben. Entweder durch schlechte Dokumentation oder durch “verbuggtes” Verhalten. Würde mich freuen, wenn der eine oder andere seine Erfahrungen mit diesen beiden Klassen posten könnte. Vielleicht kriegen wir eine schöne Bug-Sammlung zusammen und es wird eine Hilfe für andere.

Kleiner Nachtrag für die Bugsammlung:
Wenn Ihr ein TextFormat auf ein TextField anwendet, müsst ihr das TextFormat NACH der Zuweisung des Textes machen. Beispiel:

var meinText : TextField = new Textfield ();
var meinTextFormat : TextFormat = new TextFormat ();
meinTextFormat.size = 16;
meinTextFormat.color = 0xFF00FF;
meinTextFormat.font = "Verdana";
 
meinText.text = "Mein Text";
linktitle.setTextFormat ( tf );

Leave a Reply