¿Cómo extender un campo de texto que ya está en el escenario en Flash (AS3)?
-
06-07-2019 - |
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?
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