Utilizar clases con Actionscript 3.0: Parte II
En este anterior post, mostraba como empezar a trabajar con clases en AS3. En este segundo tutorial, mostraré como podemos enlazar nuestros elementos de la biblioteca con sus clases correspondientes, y como insertar estos objetos en el escenario (haciendo algo "parecido" a lo que se hacía en AS2 con attachMovie.
Lo primero que voy a intentar explicar es como se «suelen» organizar las clases. Normalmente la clase principal (la que se asocia al documento, como vimos en el anterior tutorial) se deja en la misma carpeta que el .fla principal, y el resto de clases secundarias se ordenan en una serie de subcarpetas siguiendo esta estructura:
-Nombre del dominio invertido de la persona o empresa que crea el programa. Por ejemplo en mi caso tengo las clases en com/esedeerre/.. es decir, que siempre creo una carpeta com, que tiene dentro una carpeta esedeerre, que tiene dentro una serie de carpetas con los nombres de los paquetes (ahora veremos lo que es un paquete): «utilidades», «precargas», «sonido», etc…
Esta forma de nombrar las clases, garantiza que los nombres de paquete sean únicos. Por ejemplo si en una aplicación Flash usamos clases de Papervision, de Ape, propias y de Flash, y todas estuvieran nombradas de la misma manera, Flash tendría problemas para buscarlas. Utilizando esta estructura nos aseguramos que nuestras clases no se van «a pegar» con las de otros paquetes de clases.
Ahora que hemos visto como se suelen organizar las clases, vamos a ver como acceder a esas clases que están «escondidas» en carpetas. Si tenemos una clase en com/esedeerre/Bola.as, para acceder a ella tendremos que hacer:
1 |
import com.esedeerre.Bola |
Dicho esto, creamos un documento nuevo de Flash(Actionscript 3.0)
, y asociamos el escenario a la clase Main. Ahora vamos a crear un círculo, click encima, botón derecho, convertir en símbolo, y dejamos la pantalla como esta:
Lo que estamos haciendo es crear un clip de película con nombre de instancia Bola_mc. Lo asociamos a la clase com.esedeerre.Bola (que vamos a crear después), y le decimos a Flash que lo exporte en el primer fotograma y lo exporte para Actionscript.
Ahora que tenemos el clip de la clase "Bola", vamos a su archivo de clase. Creamos un nuevo Archivo de Actionscript y lo guardamos en una carpeta llamada esedeerre, que esté dentro de una carpera com, con el nombre de Bola.as.
En este archivo escribimos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.esedeerre{ import flash.display.MovieClip; public class Bola extends MovieClip { import flash.events.*; public function Bola():void { addEventListener(Event.ENTER_FRAME,mover); } private function mover(e:Event) { x+=5; if (x > 300) { x = 0; } } } } |
Lo que estamos haciendo es crear una clase Bola, que hereda de MovieClip. En la primera linea ponemos
1 |
package com.esedeerre{ |
porque hemos guardado el archivo Bola.as en com/esedeerre/. Si lo hubieramos guardado en la misma carpera que el fla, sólo tendríamos que poner package. Es decir. que le estamos indicando a Flash la ruta hasta el archivo Bola.as. El resto de lineas siguen la estructura que ya vimos en el primer tutorial. En este caso en la función constructora
1 |
public function Bola():void { |
hemos añadido un evento enterframe para el objeto, asociado a la función mover. Esta función mueve 5 px hacia la derecha el objeto, y cuando llega a x=300 lo vuelve a colocar en 0.
Ahora que tenemos la clase Bola, vamos a crear la clase Main. Creamos un nuevo archivo de Actionscript, y escribimos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package { import flash.display.MovieClip; public class Main extends MovieClip { import flash.text.TextField; import com.esedeerre.Bola; public function Main():void { var bola:Bola = new Bola(); addChild(bola); } } } |
Como vemos, hemos tenido que importar la clase Bola para poder utilizarla. En la función constructora Main, creamos una nueva Bola y la añadimos al escenario:
1 2 |
var bola:Bola = new Bola(); addChild(bola); |
Guardamos los dos archivos .as, publicamos el fla, y deberiamos nuestra bola moviéndose de izquierda a derecha.