Archivos de la categoría ‘Apuntes que siempre se me olvidan’

Fases de propagación de eventos – ActionScript 3.0
Saturday, April 25th, 2009

Stage-->MainTimeLine-->MovieClip-->TextField-->MovieClip-->MainTimeline-->Stage

Cuando el evento se transmite hacia el objeto se le conoce como la Fase de Captura.
Cuando llega al TextField es la Target Fase.
Cuando vuelve a subir hacia el Stage Fase de Burbujeo (Bubbing)

La fase de captura no se utiliza a no ser que lo especifiques explicitamente.

Actionscript:
clip_mc.addEventListener(MouseEvent.CLICK, botonClick, true);

Se suele usar para deshabilitar eventos.

Eventos – ActionScript 3.0
Saturday, April 25th, 2009

Para enviar eventos usamos la clase EventDispatcher.
Se puede usar por herencia o por composición.

Después tenemos que crear el evento

Actionscript:
var event:Event = new Event("change");

o lo que sería mejor

Actionscript:
var event:Event = new Event(Event.CHANGE);

y después tenemos que distribuir (lanzar) el evento:

Actionscript:
dispatchEvent(event);

Para usarlo por composición tenemos que implementar IEventDispatcher
En el constructor nos creamos un nuevo EventDispatcher();

Actionscript:
dispatcher = new EventDispatcher(this); //donde this es el target que distribuye el evento.

Después en cada función definida por la Interfaz devolvemos el dispatcher:

Actionscript:
return dispatcher.dispatchEvent(event);
return dispatcher.hasEventListener(type);
return dispatcher.willTrigger(type);
return dispatcher.removeEventListener(type, listener, useCapture); etc

Cualquier DisplayObject hereda de DispatchEvent
Si queremos crear un evento propio nuestro tenemos que crear una nueva clase que herede de Event y que llame explicitamente al constructor y crear una constante estática con el nombre y valor que queramos como evento.

Actionscript:
public static const LIMITE_EXCEDIDO:String = "limite";

Después en la clase en la que vamos a usar el evento generamos un nuevo evento EjemploEvent

Actionscript:
var evento:EjemploEvent = new EjemploEvent(EjemploEvent.LIMITE_EXCEDIDO);
dispatchEvent(evento);

En la clase en la que nos vayamos a apuntar al evento

Actionscript:
foo.addEventListener(EjemploConEvento.LIMITE_EXCEDIDO, funcion);

Objetos y clases – ActionScript 3.0
Saturday, April 25th, 2009

Programación Procedural
Instrucciones que generan procedimientos
En ActionScript todo lo relacionado a funciones que generan tareas.

Pros
- Implantación rápida, resultados rápidos

Contras
- Poco mantenible a la larga, en aplicaciones con más de 500 líneas de código.

Orientado a Objetos
Divide el código en entidades diferentes

Pros
Escalables
Metodología de programación

Contras
Implantación lenta
Fácil abuso de ella sobrearquitectura de las cosas

Objeto
Es un subprograma que mantiene información y funcionalidad que maneja esa información que se está guardando
A los datos se los conoce como propiedades y a las funciones cómo métodos.

Clases
Plantilla para crear objetos
Definición abstracta de lo que va a ser un objeto.
Todos los objetos creados a partir de una misma clase van a tener los mismos métodos y propiedades.
Lo que crea un objeto único o diferente a otro es el valor de las propiedades.

Clases sin propiedades se hacen estáticas como la clase Math.

Todo lo que se puede hacer en flash está encapsulado en clases.

Paquetes
Un paquete puede contener otro paquete, clases o definiciones de funciones.

1.- Paquete Flash
La utilización de este paquete no añade código ni peso a nuestra película. Se encuentra integrado dentro del flash player.

2.- Librería FL
Son los componentes de flash. No viene compilada dentro del flash player. Hay que añadir el código a la película flash cuando usemos un componente.

3.- Libería mx
Componentes de Flex

Sirven para organizar el código y para que no halla colisión entre nombres.

Como crear un objeto a partir de una clase

Operador new

Actionscript:
var punto:Point = new Point(); // instancia un objeto de la clase Point

Una vez instanciado el objeto podemos acceder a sus métodos y propiedades

Actionscript:
punto.x = 30;
trace(punto);

punto.offset(30, 10); // Offset desplaza el punto
trace(punto); salida (60, 10);

El constructor puede recibir parámetros, si vienen entre corchetes, éstos son opcionales.

Si escribimos el código en línea de tiempo podemos usar los paquetes sin importarlos.
Cuando trabajemos con clases tenemos que importar las clases.

import flash.geom.Point;
import flash.geom.*; // importa el paquete entero

Importando una clase no se añade el código al swf. Si no tiene el paquete importado se va a ir al top level a buscar.
En el momento de compilación busca las clases y las compila en el .swf

Cuando se instancia una clase flash va a mirar si es una clase del top level --> si no, se pone a mirar en las directivas import del código para buscar la clase.

COMO CREAR UNA CLASE
creamos el nombre del paquete, si no va dentro de ningún paquete lo dejamos vacío pero usamos la declaración de package

Por cada archivo de ActionScript solo puede haber una definición o de función o de clase.

CLASSPATH (rutas de clase)
Ruta donde va a buscar flash las clases en el disco.

1.- DE DOCUMENTO
2.- GLOBALES

Se configuran en preferencias --> ActionScript
De manera predeterminada vienen dos classpath por defecto
"." va a buscar en el mismo directorio que el propio archivo .fla
$(AppConfig)/ActionScript 3.0/Classes va a buscar en el directorio Adobe Flash CS3 es
Archivos .swc código precompilado ,no son más que archivos .zip con un archivo xml y otro swf

Podemos insertar los classpath que queramos

Librería Standard (Clases de Flash)
Clases del proyecto (Clases que están al lado del fla)
Nuestra librería de clases

En configuración de publicación en la pestaña de Flash tenemos tambien una Ruta de Clases, pero solo para ese archivo.

En configuración de publicación tenemos una pestaña que crea un SWC, código precompilado para dar al cliente cuando no queremos dar nuestras clases.

ATRIBUTOS DE CONTROL DE ACCESO o Visibilidad

Se usan tanto en propiedades como métodos, asigna quien puede utilizar esa función, clase o método.

public: cualquiera puede ver/utilizar esa definición
private: solo se puede usar desde este código (desde esta clase), métodos de ayuda dentro de la clase. Pensado para uso interno.
protected: lo pueden ver la clase y las subclases
internal: solo puede ser visto por otras clases que estén dentro del mismo paquete. Es el valor por defecto cuando no ponemos ningún atributo.

PROGRAMACIÓN ORIENTADA A OBJETOS

CUALIDADES
1- Abstracción:
Nunca se debería saber el funcionamiento de una clase para poder usarla.

2.- Encapsulamiento:
Una clase no debería dejar modificar sus propiedades.
No poner propiedades públicas.

3.- Herencia
4.- Polimorfismo

Polimorfismo – ActionScript 3.0
Saturday, April 25th, 2009

Capacidad de una clase para comportarse como diferentes tipos de clases.

Se hace la diferencia entre tipo y clase, es decir, la clase círculo es del tipo FormaGeometrica.

Actionscript:
var c:Circulo = new Circulo(); // Círculo hereda de FormaGeometrica
function medirAncho(a:FormaGeometrica) : void
{
    trace(a.ancho);
}
medirAncho(c);

Esto es posible gracias al polimorfismo, el tipo puede ser la superclase (FormaGeometrica) y el valor siempre será el objeto que pasemos, es decir, si como tipo ponemos la superclase podremos pasar como parámetro cualquiera de las subclases (Circulo, Cuadrado, Triangulo, etc).

Después con is podemos averiguar de que tipo es la clase y actuar de una forma u otra con ella.
Pej.

Actionscript:
function medirAncho(a:FormaGeometrica) : void
{
    if(a is Circle)
    {
        trace(a.radius * 2);
    }
    if(a is Rectangle)
    {
        trace(a.ancho);
    }
}

Cuando hablamos de polimorfismo podemos decir: "Tiene un..."

Herencia – ActionScript 3.0
Saturday, April 25th, 2009

La herencia es una relación entre clases.
Permite que una clase herede la funcionalidad de otra (propiedades y métodos).

A la clase superior se la conoce como clase superior o clase base. La clase que hereda se la conoce como subclase o extensión.
Una subclase solo puede tener una superclase.

Cuanto más se baja en la cadena de herencia se vuelven más especializadas las clases.

Desde una subclase no se puede acceder a las propiedades privadas de la superclase.

Podemos usar protected para acceder desde la subclase a una propiedad de la superclase, pero no permitir su acceso desde otros lugares.

Public: permite acceder a propiedades y métodos desde cualquier sitio (miembros y clases)
Protected: permite acceder desde dentro de la clase y sus subclases. (miembros)
Private: solo permite desde la propia clase. (miembros)
Internal: solo permite acceder desde el mismo paquete (miembros y clases)

* miembro: propiedades y métodos

Atributos de clase

final
dynamic
internal
public

El atributo final se usa para que no se pueda heredar de una clase.
Dynamic indica que esa clase puede tener propiedades dinámicas (ej. Object, MovieClip).

LOS MÉTODOS Y PROPIEDADES ESTÁTICOS NO SE HEREDAN

Override
Si creamos un método en la subclase con el mismo nombre que en la superclase nos sale un error para evitar problemas.
Para sobreescribir un método de la superclase tenemos que marcarla como override en la subclase, después podremos ejecutar el código del método de la superclase escribiendo super.

Actionscript:
public override function metodo() : void
{
    trace("Método de la clase base");
}

Si además queremos que se ejecute el código de la clase superior al hacer el override podemos usar super.
Para poder ocultar un método con override el método debe tener la misma firma que la superclase (exacta).

Actionscript:
public override function metodo() : void
{
    super.metodo();
    trace("Método de la subclase");
}

Cuando hablamos de herencia podemos decir: "Es un..."
Ej. Un Ferrari es un deportivo que a su vez es un coche

Donde utilizamos una superclase podemos usar una subclase.

Casting y conversión – ActionScript 3.0
Saturday, April 25th, 2009

Gracias a la herencia podemos hacer un casting de obj para tratarlo como un MovieClip:

1.- Casting

Actionscript:
var obj:Object = new MovieClip();
var mc:MovieClip = obj as MovieClip;

2.- Conversión

Actionscript:
var obj:Object = new MovieClip();
var mc:MovieClip = MovieClip(obj);

Quizá se vea más claro con Number y String:

Actionscript:
var num:uint = 1;
var str:String = String(num);

Ancla a una función – ActionScript 3.0
Saturday, April 25th, 2009

Como lanzar una función desde un campo de texto en AS3:

Actionscript:
campo_txt.addEventListener(TextEvent.LINK, campoLink);
function campoLink(event:TextEvent)
{
    trace(event.text);
}

campo_txt.htmlText = "Hola <a href='event:El texto del ancla'>Ancla</a>";