Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/06/2010, 19:12
Avatar de mortiprogramador
mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Realizar Multimedia en AS3

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:

Código actionscript:
Ver original
  1. include "test.as"

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
  1. //Seteo de objetos
  2. // txt_0.text = "HOLA"; //false, porque? porque esta DENTRO de mc_0
  3. mc_0.txt_0.text = "txt MC"; //true
  4. txt_1.text = "txt 1";
  5. mc_0.btn_0.label = "btn MC";
  6. btn_1.label = "Boton 1";
  7. btn_2.label = "Boton 2";
  8. btn_3.label = "Boton 3";
  9.  
  10. //Agregar listeners a botones
  11. mc_0.btn_0.addEventListener(MouseEvent.CLICK, cualdetodos);
  12. btn_1.addEventListener(MouseEvent.CLICK, cualdetodos);
  13. btn_2.addEventListener(MouseEvent.CLICK, cualdetodos);
  14. btn_3.addEventListener(MouseEvent.CLICK, cualdetodos);
  15.  
  16.         function cualdetodos(e:MouseEvent):void
  17.     {
  18.         //e nos traera información interesante sobre el botón presionado, por ej
  19.         //se puede usar también target, pero este suele devolver el destinatario y no el remitente
  20.         //ej: target txt_0 currentTarget btn_0
  21.         trace(e.currentTarget.label);
  22.         if(e.currentTarget.label == 'btn MC')
  23.         {
  24.             mc_0.txt_0.text = "Somos parientes";
  25.         }
  26.         else
  27.         {
  28.             txt_1.text = "Hoy soy pariente de " + (e.currentTarget.label);
  29.         }
  30.     }

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

Código actionscript:
Ver original
  1. var btn_1:Button;

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
  1. //si tuvieramos el .as en una carpeta source/test el package seria package source.test
  2. package{
  3.     import fl.controls.Label;
  4.     import fl.controls.Button;
  5.     import flash.display.MovieClip;
  6.     import flash.events.MouseEvent;
  7.     import flash.text.TextField;
  8.    
  9.     public class test extends MovieClip{
  10.        
  11.         function test():void
  12.         {
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 original
  1. package{
  2.     import fl.controls.Label;
  3.     import fl.controls.Button;
  4.     import flash.display.MovieClip;
  5.     import flash.events.MouseEvent;
  6.     import flash.text.TextField;
  7.    
  8.     public class test2extends MovieClip{
  9.        
  10.         function test2():void
  11.         {
  12.             //Seteo de objetos
  13.             // txt_0.text = "HOLA"; //false, porque? porque esta DENTRO de mc_0
  14.             txt_0.text = "txt2 sMC"; //true
  15.             btn_0.label = "btn2 MC";
  16.             //Agregar listeners a botones
  17.             btn_0.addEventListener(MouseEvent.CLICK, cualdetodos);
  18.         }
  19.        
  20.     function cualdetodos(e:MouseEvent):void
  21.     {
  22.         //e nos traera información interesante sobre el botón presionado, por ej
  23.         //se puede usar también target, pero este suele devolver el destinatario y no el remitente
  24.         //ej: target txt_0 currentTarget btn_0
  25.         trace(e.currentTarget.label);
  26.         if(e.currentTarget.label == 'btn2 MC')
  27.         {
  28.             txt_0.text = "nuevos parientes";
  29.         }
  30.     }
  31.     }
  32. }

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
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 02/06/2010 a las 19:18 Razón: add_files()