Hola
pues agradezco los comentarios, pero pues es por usuarios como vos que en realidad tienen las ganas de mejorar como programador que (en mi caso) se explaya uno en los temas discutidos
Bueno, hay muchas maneras de implementarlo y de hecho al empezar a escribir un documento explicativo me estoy explayando demasiado, pues explico muchas cosas, tantas que en serio convertiria este post en un super blog, por eso mismo me permito autocercenar mi escritor interno (pero juro que volverá, uno de mis tantos proyectos en el tintero es escribir artículos sobre programación, cosa que aún no he hecho) aunque demonios, termine de escribir esto y me he desbocado....
Así pues, en resumidas cuentas haremos estos experimento
Experimento1
Ingredientes obligatorios:
1 test.fla
1 test.as
(archivos al mismo nivel o carpeta, aunque es mejor manejarlo en carpetas aparte)
1 textbox (Tener en cuenta height y width para visualizar textos)
4 botones visualmente hablando (pues en la biblioteca solo sera 1)
Pasos
0. Se abre el .fla y se agregan los ingredientes faltantes al stage
1. Damos el sacramento del bautismo a estos hijos de su madre, así:
textbox->txt_0, txt_1 (los txt NO los hemos convertido en simbolos, simplemente los dibujamos con la herramienta text)
buttons->btn_0, btn_1, btn_2, btn_3 (los botones NO los hemos convertido en simbolos, vienen tal cual de la librería de componentes)
2. Llevar hacia un lado del escenario a txt_0 y btn_0,
y formar un hogar (seleccionando ambos elementos) que convertido en simbolo se llamara mc_0 de tipo MovieClip
Hasta aquí tenemos lo necesario para empezar el tortuoso camino de la vida o linea de tiempo
para este swf
Nos ubicamos entonces en el Layer1, Frame1 (para este experimento unico layer y frame)
y vamos al panel de acciones, e insertamos este código:
Ahora necesitamos darle el poder al .as, por lo que creamos
un nuevo archivo llamado test.as y dentro va este código
(esto sería igual que tenerlo en layer1 frame1 del fla
Código actionscript:
Ver original//Seteo de objetos
// txt_0.text = "HOLA"; //false, porque? porque esta DENTRO de mc_0
mc_0.txt_0.text = "txt MC"; //true
txt_1.text = "txt 1";
mc_0.btn_0.label = "btn MC";
btn_1.label = "Boton 1";
btn_2.label = "Boton 2";
btn_3.label = "Boton 3";
//Agregar listeners a botones
mc_0.btn_0.addEventListener(MouseEvent.CLICK, cualdetodos);
btn_1.addEventListener(MouseEvent.CLICK, cualdetodos);
btn_2.addEventListener(MouseEvent.CLICK, cualdetodos);
btn_3.addEventListener(MouseEvent.CLICK, cualdetodos);
function cualdetodos(e:MouseEvent):void
{
//e nos traera información interesante sobre el botón presionado, por ej
//se puede usar también target, pero este suele devolver el destinatario y no el remitente
//ej: target txt_0 currentTarget btn_0
trace(e.currentTarget.label);
if(e.currentTarget.label == 'btn MC')
{
mc_0.txt_0.text = "Somos parientes";
}
else
{
txt_1.text = "Hoy soy pariente de " + (e.currentTarget.label);
}
}
Siguiendo estos pasos, deberíamos ver interacción entre botones y textos dinámicos
Ahora bien, si ven el código no hay variables de ningún tipo, entonces si escribieran el código
por ej : btn_1. no verían la "ayuda" que da flash para propiedades y métodos del botón, porque es esto??
porque no se han creado variables de los tipos necesarios, entonces por ej
para el btn_1 podriamos crear una variable de este modo
y con esto deberiamos ver la ayuda
Experimento2
Es el mismo 1, con dos diferencias
0. agregaremos esto en el archivo .as
(notese que aquí necesitamos hacer imports!)
Código actionscript:
Ver original//si tuvieramos el .as en una carpeta source/test el package seria package source.test
package{
import fl.controls.Label;
import fl.controls.Button;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class test extends MovieClip{
function test():void
{
Dentro de esta función test (constructora) iria el código del seteo hasta los listeners, cerramos la función, y luego seguiria el código de la función cualdetodos, y finalmente cerramos la clase y el paquete, OJO con las llaves } !!
1. en el archivo fla ponemos el include en comentario, y nos vamos al escenario, damos click en el mismo para ver sus propiedades, y en la propiedad class escribimos test, y para probar que estan relacionadas, damos click en el lapiz, esto debe abrirnos el archivo .as
compilamos, y debe estar funcionando
Y bueno, finalmente!! por fin!!!
si usaramos varias clases
Por ej: la clase test que ya tenemos y ahora una clase test2 por ej para
el movieclip que creamos con txt_0 y btn_0
tendriamos que:
0. crear el archivo test2.as que podría tener lo siguiente:
Código actionscript:
Ver originalpackage{
import fl.controls.Label;
import fl.controls.Button;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class test2extends MovieClip{
function test2():void
{
//Seteo de objetos
// txt_0.text = "HOLA"; //false, porque? porque esta DENTRO de mc_0
txt_0.text = "txt2 sMC"; //true
btn_0.label = "btn2 MC";
//Agregar listeners a botones
btn_0.addEventListener(MouseEvent.CLICK, cualdetodos);
}
function cualdetodos(e:MouseEvent):void
{
//e nos traera información interesante sobre el botón presionado, por ej
//se puede usar también target, pero este suele devolver el destinatario y no el remitente
//ej: target txt_0 currentTarget btn_0
trace(e.currentTarget.label);
if(e.currentTarget.label == 'btn2 MC')
{
txt_0.text = "nuevos parientes";
}
}
}
}
1. Ir al fla, a la librería, buscamos el simbolo movieclip creado, click derecho->Propiedades
Seleccionamos la opción de exportar para actionscript, y en nombre de clase ponemos test2, para probar la relación, damos click en el botón con el "chulo" verde (test2.as debe estar al mismo nivel de test.as)
OK a todo
Listo, ya esta relacionado el movieclip con otra clase, compilamos y vemos que esta funcionando como antes, porque? pues porque no hemos quitado el código en test.as que trabaja con el movieclip, así que todo lo que sea mc_0 en test.as quitarlo, y volver a compilar, y debería funcionar todo (no puse removeEventListener que es para como se explica, quitarle el evento a un objeto, pero se usa igual que addEventListener)
Bueno, siempre fue largo el post después de todo, pero pues con esto me deben todos una birra pues si estuviera hablando, tendria la garganta reseca
prueben el código, y verán que aunque pueda parecer confuso en un
principio, ayuda bastante tenerlo de este modo
saludos
p.s: dejo lo siguiente:
0.
link para descarga del ejemplo
1.
compresor para descomprimirlo