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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top