Wie ein Textfeld zu erweitern, die bereits auf der Bühne in Flash (AS3)?
-
06-07-2019 - |
Frage
Ich bin auf der Suche nach einer Möglichkeit, ein Textfield zu erweitern, die auf der Bühne in Flash (AS3) allready sind so etwas wie folgt aus:
public class ChildTextField extends TextField
{
//code for childTextField comes here
}
Ich habe ein Textfeld mit Instanznamen ‚thetextfield‘ auf der Bühne platziert. Nun möchte Ich mag Blitz sagen, dieses Textfeld vom Typ ChildTextField ist. Also in meiner Dokumentenklasse erkläre ich, dass Textfeld als ChildTextField:
public class DocumentClass extends Sprite()
{
public var thetextfield : ChildTextField;
}
Dies wirft ein Typ Coercion fehlgeschlagen Fehler. Ist es möglich, die Klasse zu ändern, die für ein Textfeld in der Flash-IDE verwendet wird, wie Sie mit Bibliothekssymbolen tun?
Lösung
Angst nicht. Sie müssen Actionscript verwenden, wenn Sie Ihre erweiterten Textfeld Klasse hinzufügen möchten.
EDIT: Es ist ein Hack Weg. Quelle: http://board.flashkit.com/board/ archive / index.php / t-738887.html
Eigentlich habe ich in diesem Lauf genau Problem vor. In meinem Fall war ich versuchen, ein Textfeld erstellen mit zusätzliche Verhaltensweisen für andere eine andere Nicht-Coder Künstler zu verwenden. werde ich ausrichten Sie meine ursprüngliche Lösung, die alle ist AS3, hatte aber einen fatalen Fehler, und meine Stromlösung, die a ist Kombination von AS3 und JSFL.
Die ganze AS3 Lösung ist toll, außer für 2 Dinge: Erstens kommt es an Laufzeit anstatt zu bauen Zeit. Das bedeutet, dass es ein kleiner, aber realer Teil ist der Film der Zeit, wo nicht korrekt initialisiert. Zweitens ist es tut spielt nicht gut, wenn es mehrere Frames im Film. Die Grundidee ist, zu erfassen, die Textfelder Sie wollen ändern, bauen die Dinge um sie zu ersetzen, mit, ersetzen Sie sie dann auf der Bühne. Sie kann entweder mit tun dies durch die Erweiterung TextField- oder eine Klasse Gebäude, eine TextField- enthält und übernimmt die Schnittstelle zu. Sagen wir, du bist macht die erste. Fügen Sie einen Konstruktor SmartTextField dass Kopien alle Felder, die Sie kümmern uns um:
public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant.
}
in Ihrem Hauptfilm hat Code, erkennt und ersetzt die Textfelder Sie ersetzen möchten
var toreplace:Array = findTextFields();
var tf:TextField;
var stf:SmartTextField;
var where:int;
for (int i = 0; i < toreplace.length;i++)
{ tf = TextField(toreplace[i]);
stf = new SmartTextField(tf);
where = getChildIndex(tf);
addChildAt(stf,where);
removeChild(tf);
}
Das funktioniert gut, mit Ausnahme der Punkte oben.
Die JSFL Lösung ist ein bisschen zu komplex im Detail zu gehen, aber hier ist die Grundlagen. Haben sie eine AS3-Klasse, die Wraps ein Textfeld mit dem neuen Verhalten Sie wollen. Schreiben Sie einen JSFL Skript, das iteriert über die ausgewählten Elemente, und wenn es ein Textfeld ist, wird zu einem Symbol mit einem Basisklasse Ihrer neuen Wrapper-Klasse. Dies hat die Vorteile dass es geschieht bei Autor Zeit, und Dinge wie Position, instancename und andere Sachen ist automatisch konserviert. Es hat den Nachteil, dass JSFL hat eine Menge wenig ärgerlich Macken arbeiten durch.
edit: Natürlich, wenn dies nur für ein ein einzelner Film, könnte man das verzichten JSFL Konverter-Skript, und tun Sie es einfach von Hand. konvertieren Symbol -> Wrapper Basisklasse.