Question

Je cherche un moyen d'étendre un champ TextField déjà présent sur la scène en Flash (AS3). quelque chose comme ceci:

public class ChildTextField extends TextField 
{
    //code for childTextField comes here    
}

J'ai placé un TextField avec le nom d'occurrence 'thetextfield' sur la scène. Maintenant, je voudrais dire à Flash que ce champ de texte est de type ChildTextField. Donc, dans ma classe de document, je déclare ce champ de texte en tant que ChildTextField:

public class DocumentClass extends Sprite()
{
    public var thetextfield : ChildTextField;
}

Ceci renvoie une erreur de type coercition. Est-il possible de changer la classe utilisée pour un champ de texte dans l'IDE Flash, comme vous pouvez le faire avec les symboles de bibliothèque?

Était-ce utile?

La solution

N'ayez pas peur. Vous devrez utiliser ActionScript si vous souhaitez ajouter votre classe de champ de texte étendu.

EDIT: il existe un moyen de bidouiller. source: http://board.flashkit.com/board/ archive / index.php / t-738887.html

  

En fait, j'ai rencontré cet exact   problème avant. Dans mon cas, j'étais   en essayant de créer un champ de texte avec   comportements supplémentaires pour d'autres un autre   artistes non codeurs à utiliser. Je dirai   vous ma solution originale qui est tout   as3, mais avait un défaut fatal, et mon   solution actuelle, qui est un   combinaison de as3 et jsfl.

     

La solution tout as3 est géniale sauf   pour 2 choses: d'abord, ça se passe à   runtime plutôt que le temps de construction. Cette   signifie qu'il y a une petite mais réelle partie   du temps où le film n'est pas   correctement initialisé. Deuxièmement, il fait   pas bien jouer s'il y a plusieurs   images dans le film. L'idée de base est   détecter les TextFields que vous voulez   changer, construire des choses pour les remplacer   avec, puis remplacez-les sur scène. Vous   peut le faire avec soit en étendant   TextField, ou construire une classe qui   contient un TextField et gère le   interface à elle. Disons que vous êtes   faire le premier. Ajouter un constructeur à   SmartTextField qui copie tous les   les domaines qui vous intéressent:

public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant. 
}
  

dans votre film principal ont un code qui   détecte et remplace les TextFields   vous voulez remplacer

 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); 
 }
  

Cela fonctionne bien, sauf pour les points   ci-dessus.

     

La solution JSFL est un peu trop complexe   pour aller en détail, mais voici la   les bases. Avoir une classe as3 qui enveloppe   un champ de texte avec le nouveau comportement que vous   vouloir. Ecrire un script jsfl qui   itère sur les éléments sélectionnés, et   si c'est un champ de texte, convertit en   symbole avec une classe de base de votre nouveau   classe d'emballage. Cela a les avantages   qu'il se passe au moment de l'auteur, et   des choses comme la position, instancename et   d'autres choses est automatiquement   conservé. Il a l'inconvénient   que jsfl a beaucoup de petit ennuyeux   bizarreries à résoudre.

     

edit: Bien sûr, s'il ne s'agit que d'un   seul film, vous pouvez renoncer à la   script convertisseur jsfl, et juste le faire   par la main. convertir en symbole - > emballage   classe de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top