Manejo de MovieClips con ActionScript 3

Posted by admin | AS3,Básico,Flash,Tutoriales | Friday 25 May 2007 5:41 pm

Este es un Tip muy sencillo pero que trae de cabeza a la gente que empieza con ActionScript 3, así que lo escribo para intentar aclarar un poco cuál es el sistema de añadir a nuestra película MovieClips que estén situados dentro de nuestra biblioteca y empezar a montar nuestra película.

Como ya se dijo en otro tip, el sistema de añadir elementos de la biblioteca a cambiado en AS3. Ahora attachMovie no funciona, añadimos los clips con addChild y para realizar este proceso hemos de crear una clase para cada clip que queramos añadir.

Este es el proceso a seguir:

Primero crearemos el MovieClip y lo tendremos en la biblioteca.

img

Abriremos las propiedades del MovieClip y en las opciones de linkage seleccionaremos "exportar para actionscrip" y le daremos un nombre para la clase.

img

Como podemos ver, ahora en AS3 hemos de vincular el MovieClip a una clase, NO darle un nombre de identificador como hacíamos en AS2.

NOTA: Si intentásemos añadir un nombre de identificador al MovieClip no aparecería una advertencia indicándonos que ese proceso solo es para AS2 y nos preguntara si queremos cambiar las opciones de publicación.

img

Ahora para añadir este MovieClip a nuestra película hemos de crear una instancia de esa clase

Actionscript:
  1. var clip1:clipA = new clipA();

Y la situaremos en el stage con addChild

Actionscript:
  1. var clip1:clipA = new clipA();
  2. clip1.x = 100;
  3. clip1.y = 100;
  4. addChild(clip1);

Y listo!

img

Ahora si quisiésemos añadirle algún tipo de interactividad a este MovieClip, como por ejemplo añadirle un evento de click, no colocaríamos el código en el .fla cómo haríamos en AS1 o AS2 sino que crearemos un archivo .as con el nombre de la clase que le indicamos al MovieClip y ahí escribiremos todo el código necesario para manejar este MovieClip.

Actionscript:
  1. package
  2. {
  3.    import flash.display.MovieClip;
  4.    import flash.events.MouseEvent;
  5.    //
  6.    public class clipA extends MovieClip
  7.    {
  8.       public function clipA()
  9.       {
  10.          addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
  11.       }
  12.       private function mouse_down(event:MouseEvent):void
  13.       {
  14.          trace("CLICK!");
  15.       }
  16.    }
  17. }

En AS3 es recomendable trabajar con clases y colocar el menos código posible sobre la línea de tiempo con lo que este código lo podíamos meter dentro de una clase Main.as

Actionscript:
  1. package
  2. {
  3.    import flash.display.MovieClip;
  4.    //
  5.    public class Main extends MovieClip
  6.    {
  7.       private var _root:MovieClip;
  8.       private var clip1:clipA = new clipA();
  9.       //
  10.       public function Main(ruta:MovieClip)
  11.       {
  12.          _root = ruta;
  13.          //
  14.          clip1.x = 100;
  15.          clip1.y = 100;
  16.          _root.addChild(clip1);
  17.       }
  18.    }
  19. }

Al constructor de la clase le pasaremos como parámetro la ruta de la línea de tiempo principal (el _root).

Este sería el único código de nuestro .fla

Actionscript:
  1. var _root:Main = new Main(this);

Esta clase Main también la podíamos haber instanciado desde el panel de propiedades de la película

img

De esta manera no es necesario introducir ningún código dentro de nuestro .fla, y tampoco es necesario pararle ningún parámetro ya que en este caso el this ya hace referencia a la línea de tiempo principal, por lo que la clase Main quedaría así:

Actionscript:
  1. package
  2. {
  3.    import flash.display.MovieClip;
  4.    //
  5.    public class Main extends MovieClip
  6.    {
  7.       private var _root:MovieClip;
  8.       private var clip1:clipA = new clipA();
  9.       //
  10.       public function Main()
  11.       {
  12.          _root = this;
  13.          //
  14.          clip1.x = 100;
  15.          clip1.y = 100;
  16.          _root.addChild(clip1);
  17.       }
  18.    }
  19. }

A partir de aquí iremos ampliando la clase Main y iremos añadiendo más clases y subclases para construir nuestra película.

Espero haber aclarado alguna duda ;)

Post relacinonados:

  1. Acceder a funciones en MovieClips de películas .swf externas
  2. Cómo duplicar MovieClips con gráficos en ActionScript 3
  3. Clase de ActionScript 3 para añadir sombras a MovieClips
  4. Asignar código actionscript en clases a fotogramas concretos
  5. Cómo duplicar un MovieClip en ActionScript 3

15 Comments »

  1. Comment by Rafeo — 5 February, 2012 @ 2:11 am

    Ã’rale sencillo y muy bueno, gracias Zguillez !

  2. Comment by Serrrrr — 5 February, 2012 @ 2:11 am

    Disculpa, para hacer mis propias clases se declaran de la misma forma?

  3. Comment by admin — 5 February, 2012 @ 2:11 am

    @Serrrr: Si claro, puedes declarar cualquier clase de esta forma. Siempre que quieras asignar una clase a un MovieClip de la librería.

  4. Comment by alexis — 5 February, 2012 @ 2:11 am

    dentro de mi movieclip hay otro que es un circulo que tiene nombre de instancia círculo... ¿por qué no puedo referenciar a ese objeto en el constructor de mi clase?

    quiero que ese circulo tenga alpha 60

    gracias

  5. Comment by rebef — 5 February, 2012 @ 2:11 am

    que script se le agrega para un boton dentro de un moviclip? para que este haga la accion de regresar a una de los labels la linea de tiempo principal??

    les agradeceria mucho su ayuda!

  6. Comment by grimihan — 5 February, 2012 @ 2:11 am

    muchas gracias por este tutorial, es muy interesante y útil, pero por favor, podrían tener la bondad de poner las imágenes, que no se ven y no me queda claro lo que tengo que poner en las opciones de linkage?

    Muchísimas gracias!

  7. Comment by grimihan — 5 February, 2012 @ 2:11 am

    ya estáaaaaaaaa muchísimas gracias tio!!!!! no te imaginas como te agradezco este post!!!!! Saludos ;)

  8. Pingback by ActionScript 3.0: enormes cambios « OOP World — 5 February, 2012 @ 2:11 am

    [...] No hay mas attachMovie: http://www.codigo.as/blog/?p=76 [...]

  9. Comment by ikaro — 20 December, 2008 @ 2:45 pm

    Buena guía, sólo te comento que no se están mostrando las imagenes, saludos

  10. Comment by cesar — 5 February, 2009 @ 5:00 pm

    Hi I dont understand the example, how I can call the as files from flash, Im new in flash so if you had a complete example (the image doesnt appear). Thanks a lot for the collaboration

    see you

  11. Comment by pshycodelic — 13 July, 2009 @ 8:48 am

    Creo ke te falto el argumente para el metodo Main "public function Main(_root)" en el ultimo ejemplo de codigo

  12. Comment by silvia — 19 August, 2010 @ 3:22 am

    hola buenos dias, la verdad es que me estoy volviendo loca, porque no tengo mucha idea y he empezado un trabajo con as3 y ahora estoy atascada.
    mi duda es la siguiente, ya no hay que poner en el nombre de instancia de un boton el "_btn"?? poruqe me da error en el codigo constantemente y ahora no se que hacer poruqe me sale este mensaje constantemente:
    Advertencia: Esta película utiliza funciones no admitidas en el Flash Player 5
    Símbolo=mapas, layer=botones_mapa, frame=1:Nombre de instancia de botón de Flash MX
    Símbolo=mapas, layer=boton_volver_mapas, frame=1:Nombre de instancia de botón de Flash MX

    espero que me puedas ayudar si no te importa,
    muchisimas gracias

  13. Comment by davinchi — 18 October, 2010 @ 7:08 am

    Hola, quería saber en qué lugar creas la clase clipA para después poder instanciarlo en "private var clip1:clipA = new clipA();" He ejecutado los dos últimos ejemplos y da un error: "1046: No se encontró el tipo o no es una constante en tiempo de compilación: clipA."
    Gracias

  14. Comment by davinchi — 18 October, 2010 @ 7:13 am

    Perdón. Había leido mal. El ejemplo está perfecto.
    Muchas gracias.

  15. Comment by EricR — 15 November, 2010 @ 3:12 am

    Hola. Una pregunta:
    Que tal si clipA tuviera 2 animaciones dentro identificadas con markers. Como puedo hacer que si doy click al movie clip se muestre la animación 1 y cuando lo suelte se muestre la animación 2? ojo son animaciones no son estáticas. Es que estoy que intento y solo se muestra el primer fotograma de las animaciones.

    Gracias

RSS feed for comments on this post. TrackBack URI

Leave a comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes