Domanda

Sto cercando un modo per estendere un TextField che è già sul palco in Flash (AS3) qualcosa del genere:

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

Ho posizionato un oggetto TextField con il nome dell'istanza 'thetextfield' sullo stage. Ora vorrei dire a Flash che questo campo di testo è di tipo ChildTextField. Quindi nella mia Document Class dichiaro quel campo di testo come ChildTextField:

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

Questo genera un errore di tipo Coercion fallito. È possibile cambiare la classe utilizzata per un campo di testo nell'IDE Flash come si può fare con i simboli della libreria?

È stato utile?

Soluzione

Non temere. Dovrai utilizzare ActionScript se desideri aggiungere la classe estesa del campo di testo.

EDIT: esiste un modo hack. fonte: http://board.flashkit.com/board/ archive / index.php / t-738887.html

  

In realtà, mi sono imbattuto in questo esatto   problema prima. Nel mio caso, lo ero   cercando di creare un campo di testo con   comportamenti extra per altri alcuni altri   artisti non programmatori da usare. io dirò   tu la mia soluzione originale che è tutto   as3, ma aveva un difetto fatale, e il mio   soluzione attuale, che è a   combinazione di as3 e jsfl.

     

La soluzione all as3 è eccezionale tranne   per 2 cose: in primo luogo, succede a   runtime anziché build-time. Quello   significa che c'è una porzione piccola ma reale   del tempo in cui il film non è   inizializzato correttamente. Secondo, lo fa   non gioca bene se ci sono più   fotogrammi nel film. L'idea di base è   per rilevare i campi di testo che si desidera   cambiare, costruire cose per sostituirle   con, quindi sostituirli sul palco. tu   può farlo con entrambi estendendo   TextField, o costruendo una classe che   contiene un campo di testo e gestisce il file   interfaccia ad esso. Diciamo che lo sei   fare il primo. Aggiungi un costruttore a   SmartTextField che copia tutto   campi che ti interessano:

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

nel tuo film principale hanno un codice che   rileva e sostituisce TextFields   vuoi sostituire

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

Funziona bene, tranne i punti   sopra.

     

La soluzione JSFL è un po 'troppo complessa   per approfondire, ma ecco il   nozioni di base. Avere una classe as3 che avvolge   un campo di testo con il nuovo comportamento tu   volere. Scrivi uno script jsfl che   scorre gli elementi selezionati e   se è un campo di testo, converte in a   simbolo con una base di base del tuo nuovo   classe wrapper. Questo ha i vantaggi   che succede al momento dell'autore e   cose come posizione, nome istanza e   altre cose sono automaticamente   conservato. Ha lo svantaggio   che jsfl ha molto poco fastidioso   stranezze da risolvere.

     

modifica: ovviamente, se questo è solo per a   film singolo, potresti rinunciare al   jsfl converter script, e basta farlo   a mano. converti in simbolo - > involucro   baseclass.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top