Flash hat mir die letzte Woche wahrlich den Nerv geraubt. Und ich hoffe, ich muss mich das nächste mal nicht mit schon vorhandenen (AS2)- Quellen rumschlagen.
Mittlerweile habe ich Workarounds gefunden, trotzdem sind die eigentlichen Probleme noch nicht gelöst, weswegen ich diese nun kurz skizzieren möchte:
1. Codepage-Problem bei Bearbeitung von Win-FLA’s unter OSX
Ich habe eine unter Win erstellte FLA zur Nachbearbeitung erhalten.
Darin enthalten sind auch dynamische Textfelder mit eingebetteter Schrift (überall wurde ‘Helvetica Neue’ verwendet).
Meine Aufgabe war, das Flash mit rumänischen Übersetzungen zu versehen. Die festen Texte konnte ich durch Copy&Paste einfach ersetzen – bei den dynamischen Einträgen allerdings werden die Zentraleuropäischen Sonderzeichen (z.B. ţ und ă ) nur als Kästchen dargestellt.
Die anfänglichen Verdächte nach falscher Konvertierung (utf8/ iso-mix) oder aber vergessener Einbettung der zusätzlichen Glyphen haben sich nicht bestätigt.
Ich habe zum Überprüfen ein Testflash mit Dynamic-Feld angelegt und als Basis-Aktion
label1.text = "AB: \u0163 Selectează o ţară";
benutzt. Hier gab es keinerlei Probleme. Auch ein Ändern der Schriftart bewirkte Kästchen bei dem einen und saubere Zeichen bei dem anderen Flash.
Nur Helvetica (nicht Helvetica Neue) hat die Zeichen in beiden Filmen sauber dargestellt.
Meine Vermutung ist nun, dass Windows eine falsche Codepage oder eine falsche 2-Byte-Zuordnung der Sonderzeichen in den Tiefen einer FLA speichert – und OSX diese versucht, weiterzuverwenden.
Falls hier jemand eine Lösung kennt: Bitte melden!!
onRelease-Callback-Funktionen mit aus einer separaten Klasse heraus
Das zweite Problem ist sehr ActionScript-Lastig.
Ich möchte über eine separat eingebundene Klasse einem Button ein spezifisches Link-Verhalten geben. Ins besondere möchte ich das Frame-Target (also z.B. _blank oder _self) verändern und den Link dann nach einem Klick öffnen. Die Besonderheit ist hierbei, dass ich eine dynamische onRelease-Funktion schreibe und einen Inner-Class-Methodenaufruf durchführe. Dieser wird allerdings nicht ausgeführt und es hinterlässt auch keinerlei Fehlermeldung.
Das Script sieht so aus:
class scripts.classes.TestClass {
private var __target:String;
public function TestClass(){
trace("init TestClass");
}
public function returnTarget():String
{
if (__target == undefined) __target = "_self";
trace("__target => " + __target);
return __target;
}
public function createLink():Void
{
_root["link"].txt.text = "hello";
_root["link"].link = "http://www.google.de";
_root["link"].onRelease = function(){
var target = returnTarget();
trace ("target => " + target);
getUrl(this.link, target);
}
}
}
Die createLink() Methode ist der Problembereich. In der OnRelease-Callback-Funktion wird die Methode returnTarget() dem Link auf _root zugeordnet. Dieser kennt offensichtlich die Instanz nicht. Anstatt hier einen Fehler auszuspucken arbeitet er mit einem undefinierten String weiter.
Nun meine Frage: welche Möglichkeiten gibt es, dieses Script trotzdem noch zum Funktionieren zu bringen?