Ich habe folgendes Setup: In Label.fla gibt es einen MovieClip, der ein TextField enthält, dessen Klasse auf src.components.Label gesetzt ist. Bei dieser Klasse wird die Schriftart im Konstruktor festgelegt und dann die text -Eigenschaft des TextField auf eine leere Zeichenfolge gesetzt (der Wert der Zeichenfolge spielt für dieses Problem keine Rolle. Sie kann eine nicht leere Zeichenfolge sein und dieselbe haben Ergebnis). Wie folgt aus:AS3 - Warum wird die Schriftart gelöscht, nachdem Text eines TextFields gesetzt wurde?
package src.components
{
import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.text.TextField;
public class Label extends MovieClip
{
public var mTextField:TextField;
public function Label()
{
super();
var tf:TextFormat = new TextFormat("Arial", 34, 0xFFFFFF);
mTextField.defaultTextFormat = tf;
mTextField.setTextFormat(tf);
trace("init before: " + mTextField.getTextFormat().font);
mTextField.text = "";
trace("init after: " + mTextField.getTextFormat().font);
}
}
}
Das Label Objekt in Label.fla eingerichtet ist für Runtime-Sharing zu exportieren, die in MainMenu.fla kopiert wurde. Eine einzelne Instanz dieses Labels wird auf der Bühne von MainMenu.fla platziert, und wenn ich MainMenu.swf ausführe, zeigt die Ausgabe eindeutig, dass die Schriftart gesetzt und dann sofort gelöscht wird, nur weil ich die Text-Eigenschaft des TextFields ändere.
Die Ausgabe sieht wie folgt aus:
init before: Arial
init after: null
Warum sollte die Einstellung der Text verursachen die Schriftart gelöscht werden? Das verursacht mir viele Probleme. Die einzige Möglichkeit, wie ich das umgehen kann, ist, etwas Dummes zu tun, wo ich eine Kopie des TextFormat-Objekts anlege, bevor ich den Text setze, den Text setze und dann das kopierte TextFormat erneut anwende, um sicherzustellen, dass es sich nicht ändert .
Ich habe eine Zip-Datei angehängt, die alle Quell- und kompilierten Dateien enthält, um dies zu testen. FontTest.zip
Ich verstehe nicht 100% wie standardTextFormat funktioniert auch mit der Dokumentation. Ich stelle es ein, also würde ich erwarten, dass es es nach dem Ändern des Textes anwenden würde. Obwohl es nach dem erneuten Lesen der Dokumente nur replaceSelectedText() und setSelection() erwähnt, funktionieren vielleicht nur diese beiden Funktionen? Ich werde damit herumspielen müssen mehr ... – Shenjoku