Pregunta

Estoy buscando una manera de extender un TextField que ya está en el escenario en Flash (AS3) algo como esto:

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

He colocado un campo de texto con el nombre de instancia 'campo de campo' en el escenario. Ahora me gustaría decir que flash este campo de texto es de tipo ChildTextField. Así que en mi Clase de documento declaro ese campo de texto como ChildTextField:

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

Esto arroja un error de Error de coerción de tipo. ¿Es posible cambiar la clase que se usa para un campo de texto en el IDE de Flash como lo puede hacer con los símbolos de la biblioteca?

¿Fue útil?

Solución

No tengo miedo. Deberá usar ActionScript si desea agregar su clase de campo de texto extendido.

EDITAR: hay una forma de hackear. fuente: http://board.flashkit.com/board/ archive / index.php / t-738887.html

  

En realidad, me he topado con este exacto   problema antes En mi caso, yo estaba   tratando de crear un campo de texto con   Comportamientos extra para otros algunos otros   Artistas no codificadores para utilizar. Yo diré   Eres mi solución original, que es todo.   as3, pero tuvo un defecto fatal, y mi   solución actual, que es una   Combinación de as3 y jsfl.

     

La solución all as3 es genial, excepto   para 2 cosas: Primero, sucede en   tiempo de ejecución en lugar de tiempo de construcción. Ese   significa que hay una porción pequeña pero real   de tiempo donde la pelicula no esta   correctamente inicializado. Segundo, lo hace   no jugar bien si hay multiples   Marcos en la pelicula. La idea básica es   para detectar los campos de texto que desea   Cambia, construye cosas para reemplazarlos.   Con, luego reemplázalos en el escenario. Tú   puede hacer esto ya sea mediante la extensión   TextField, o la construcción de una clase que   contiene un TextField y maneja el   interfaz para ello. Digamos que eres   haciendo lo primero. Agregar un constructor a   SmartTextField que copia todos los   campos que te interesan:

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

en tu película principal tienes un código que   Detecta y reemplaza los campos de texto.   quieres reemplazar

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

Esto funciona bien, excepto por los puntos   arriba.

     

La solución JSFL es un poco demasiado compleja   para repasar en detalle, pero aquí está el   lo esencial. Tener una clase de as3 que envuelve   Un campo de texto con el nuevo comportamiento que   querer. Escribe un script jsfl que   itera sobre los elementos seleccionados, y   si es un campo de texto, se convierte en un   símbolo con una baseclass de tu nuevo   clase de envoltura. Esto tiene las ventajas.   que suceda a la hora del autor, y   cosas como posición, nombre de instancia y   otra cosa es automáticamente   Preservado. Tiene la desventaja   que jsfl tiene un poco de molesto   peculiaridades para trabajar a través.

     

editar: Por supuesto, si esto es solo para un   solo película, podrias renunciar al   script jsfl converter, y solo hazlo   a mano. convertir a símbolo - > envoltura   clase basica

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top