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
Y la situaremos en el stage con addChild
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.
{
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
{
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
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í:
{
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
Post relacinonados:




November 30th, 1999 at 12:00 am
Ã’rale sencillo y muy bueno, gracias Zguillez !
November 30th, 1999 at 12:00 am
Disculpa, para hacer mis propias clases se declaran de la misma forma?
November 30th, 1999 at 12:00 am
@Serrrr: Si claro, puedes declarar cualquier clase de esta forma. Siempre que quieras asignar una clase a un MovieClip de la librerÃa.
November 30th, 1999 at 12:00 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
November 30th, 1999 at 12:00 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!
November 30th, 1999 at 12:00 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!
November 30th, 1999 at 12:00 am
ya estáaaaaaaaa muchÃsimas gracias tio!!!!! no te imaginas como te agradezco este post!!!!! Saludos
November 30th, 1999 at 12:00 am
[...] No hay mas attachMovie: http://www.codigo.as/blog/?p=76 [...]
December 20th, 2008 at 2:45 pm
Buena guía, sólo te comento que no se están mostrando las imagenes, saludos
February 5th, 2009 at 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
July 13th, 2009 at 8:48 am
Creo ke te falto el argumente para el metodo Main "public function Main(_root)" en el ultimo ejemplo de codigo