Manejo de MovieClips con ActionScript 3
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.
Abriremos las propiedades del MovieClip y en las opciones de linkage seleccionaremos “exportar para actionscrip” y le daremos un nombre para la clase.
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.
Ahora para añadir este MovieClip a nuestra película hemos de crear una instancia de esa clase
- var clip1:clipA = new clipA();
Y la situaremos en el stage con addChild
- var clip1:clipA = new clipA();
- clip1.x = 100;
- clip1.y = 100;
- addChild(clip1);
Y listo!
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.
- package
- {
- import flash.display.MovieClip;
- import flash.events.MouseEvent;
- //
- public class clipA extends MovieClip
- {
- public function clipA()
- {
- addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
- }
- private function mouse_down(event:MouseEvent):void
- {
- trace("CLICK!");
- }
- }
- }
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
- package
- {
- import flash.display.MovieClip;
- //
- public class Main extends MovieClip
- {
- private var _root:MovieClip;
- private var clip1:clipA = new clipA();
- //
- public function Main(ruta:MovieClip)
- {
- _root = ruta;
- //
- clip1.x = 100;
- clip1.y = 100;
- _root.addChild(clip1);
- }
- }
- }
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
- 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
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í:
- package
- {
- import flash.display.MovieClip;
- //
- public class Main extends MovieClip
- {
- private var _root:MovieClip;
- private var clip1:clipA = new clipA();
- //
- public function Main()
- {
- _root = this;
- //
- clip1.x = 100;
- clip1.y = 100;
- _root.addChild(clip1);
- }
- }
- }
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 😉
Compártelo:
Visto 48.179 veces
Ã’rale sencillo y muy bueno, gracias Zguillez !
Disculpa, para hacer mis propias clases se declaran de la misma forma?
@Serrrr: Si claro, puedes declarar cualquier clase de esta forma. Siempre que quieras asignar una clase a un MovieClip de la librerÃa.
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
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!
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!
ya estáaaaaaaaa muchÃsimas gracias tio!!!!! no te imaginas como te agradezco este post!!!!! Saludos 😉
[…] No hay mas attachMovie: http://www.codigo.as/blog/?p=76 […]
Buena guía, sólo te comento que no se están mostrando las imagenes, saludos
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
Creo ke te falto el argumente para el metodo Main “public function Main(_root)” en el ultimo ejemplo de codigo
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
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
Perdón. Había leido mal. El ejemplo está perfecto.
Muchas gracias.
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
Clarisimo