action scrip

36
[ACTION SCRIPT] 12 de abril de 2011 Liliana Santiago y Cándido Rodríguez

Upload: candi-do

Post on 04-Jul-2015

131 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Page 2: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

HISTORIA

Page 3: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Esta sección empieza con una historia abreviada de ActionScript y la programación orientada a objetos, y continúa con una descripción del modelo de objetos y de cómo permite que la nueva máquina virtual de ActionScript (AVM2) sea considerablemente más rápida que la de las versiones anteriores de Flash Player, que incluyen la máquina virtual de ActionScript antigua (AVM1). Como el diseño de ActionScript se ha basado en las versiones anteriores de ActionScript, puede resultar útil comprender la evolución del modelo de objetos de ActionScript. ActionScript empezó siendo un mecanismo sencillo de creación de scripts para las primeras versiones de la herramienta de edición Flash. Con el tiempo, los programadores empezaron a crear aplicaciones cada vez más complejas con ActionScript. En respuesta a las necesidades de los programadores, en cada nueva versión se añadieron características al lenguaje para facilitar la creación de aplicaciones complejas.

En un principio desarrollado por Macromedia, hoy por Adobe, actionScript solo permitia interactividad limitada, mas que nada metodos de navegacion como "play ();", "stop();", "getURL();", "gotoAndPlay();" etc.

En 1999, con la aparicion de Flash 4 las acciones fueron incrementando hasta generar un lenguaje de scripts. Se introdujeron variables, expresiones, loops, bloques if etc, siempre con gran similitud a javaScript(para generar la migracion de javaScript a actionScript)

Page 4: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

DECLARACIÓN DE

Page 5: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

VARIABLVARIABLESES

ActionScript 1.0 es la versión del lenguaje utilizada en Flash Player 6 y en versiones anteriores. En esta fase inicial del desarrollo, el modelo de objetos de ActionScript ya se basaba en el concepto de objeto como tipo de datos básico. Un objeto de ActionScript es un tipo de datos compuesto con un conjunto de

Page 6: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

propiedades. Al describir el modelo de objetos, el término propiedades abarca todo lo que está asociado a un objeto, como las variables, las funciones o los métodos.

Aunque esta primera generación de ActionScript no permitía definir clases con una palabra clave class, se podía definir una clase mediante un tipo de objeto especial denominado objeto prototipo. En lugar de utilizar una palabra clave class para crear una definición de clase abstracta a partir de la cual se puedan crear instancias de objetos, como se hace en otros lenguajes basados en clases como Java y C++, los lenguajes basados en prototipos como ActionScript 1.0 utilizan un objeto existente como modelo (o prototipo) para crear otros objetos. En un lenguaje basado en clases, los objetos pueden señalar a una clase como su plantilla; en cambio, en un lenguaje basado en prototipos los objetos señalan a otro objeto, el prototipo, que es su plantilla.

Para crear una clase en ActionScript 1.0, se define una función constructora para dicha clase. En ActionScript, las funciones son objetos reales, no sólo definiciones abstractas. La función constructora que se crea sirve como objeto prototipo para las instancias de dicha clase. El código siguiente crea una clase denominada Shape y define una propiedad denominada visible establecida en true de manera predeterminada:

// base class

function Shape() {}

// Create a property named visible.

Shape.prototype.visible = true;Esta función constructora define una clase Shape de la que se puede crear una instancia mediante el operador new, de la manera siguiente:

myShape = new Shape();

Page 7: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

De la misma manera que el objeto de función constructora de Shape() es el prototipo para instancias de la clase Shape, también puede ser el prototipo para subclases de Shape (es decir, otras clases que amplíen la clase Shape).

La creación de una clase que es una subclase de la clase Shape es un proceso en dos pasos. En primer lugar debe crearse la clase definiendo una función constructora, de la manera siguiente:

// child class

function Circle(id, radius)

{

this.id = id;

this.radius = radius;

}En segundo lugar, se utiliza el operador new para declarar que la clase Shape es el prototipo para la clase Circle. De manera predeterminada, cualquier clase que se cree utilizará la clase Object como prototipo, lo que significa que Circle.prototype contiene actualmente un objeto genérico (una instancia de la clase Object). Para especificar que el prototipo de Circle es Shape y no Object, se debe utilizar el código siguiente para cambiar el valor de Circle.prototype de forma que contenga un objeto Shape en lugar de un objeto genérico:

// Make Circle a subclass of Shape.

Circle.prototype = new Shape();La clase Shape y la clase Circle ahora están vinculadas en una relación de herencia que se suele llamar cadena de prototipos. El diagrama ilustra las relaciones de una cadena de prototipos:

Page 8: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

La clase base al final de cada cadena de prototipos es la clase Object. La clase Object contiene una propiedad estática denominada Object.prototype que señala al objeto prototipo base para todos los objetos creados en ActionScript 1.0. El siguiente objeto de la cadena de prototipos de ejemplo es el objeto Shape. Esto se debe a que la propiedad Shape.prototype no se ha establecido explícitamente, por lo que sigue conteniendo un objeto genérico (una instancia de la clase Object). El vínculo final de esta cadena es la clase Circle, que está vinculada a su prototipo, la clase Shape (la propiedad Circle.prototype contiene un objeto Shape).

Si se crea una instancia de la clase Circle, como en el siguiente ejemplo, la instancia hereda la cadena de prototipos de la clase Circle:

// Create an instance of the Circle class.

myCircle = new Circle();

Page 9: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Antes se creó una propiedad denominada visible como un miembro de la clase Shape. En este ejemplo, la propiedad visible no existe como parte del objeto myCircle, sólo existe como miembro del objeto Shape; sin embargo, la siguiente línea de código devuelve true:

trace(myCircle.visible); // output: trueFlash Player puede determinar que el objeto myCircle hereda la propiedad visible recorriendo la cadena de prototipos. Al ejecutar este código, Flash Player busca primero una propiedad denominada visible en las propiedades del objeto myCircle, pero no la encuentra. A continuación, busca en el objeto Circle.prototype, pero sigue sin encontrar una propiedad denominada visible. Sigue por la cadena de prototipos hasta que encuentra la propiedad visible definida en el objeto Shape.prototype y devuelve el valor de dicha propiedad.

En esta sección se omiten muchos de los detalles y las complejidades de la cadena de prototipos por simplificar. El objetivo es proporcionar información suficiente para comprender el modelo de objetos de ActionScript 3.0.

En ActionScript 2.0 se incluyeron palabras clave nuevas, como class, extends, public y private, que permitían definir clases de una manera familiar para cualquiera que trabaje con lenguajes basados en clases como Java y C++. Es importante saber que el mecanismo de herencia subyacente no ha cambiado entre ActionScript 1.0 y ActionScript 2.0. En ActionScript 2.0 simplemente se ha añadido una nueva sintaxis para la definición de clases. La cadena de prototipos funciona de la misma manera en ambas versiones del lenguaje.

La nueva sintaxis introducida en ActionScript 2.0, que se muestra en el siguiente fragmento, permite definir clases de una manera más intuitiva para muchos programadores:

// base class

class Shape

Page 10: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

{

var visible:Boolean = true;

}En ActionScript 2.0 también se introdujeron las anotaciones de tipos de datos para la verificación de

tipos en tiempo de compilación. Esto permite declarar que la propiedad visible del ejemplo anterior sólo debe contener un valor booleano. La nueva palabra clave extends también simplifica el proceso de crear una subclase. En el siguiente ejemplo, el proceso que requería dos pasos en ActionScript 1.0 se realiza con un solo paso mediante la palabra clave extends:

// child class

class Circle extends Shape

{

var id:Number;

var radius:Number;

function Circle(id, radius)

{

this.id = id;

this.radius = radius;

}

}Ahora el constructor se declara como parte de la definición de clase y las propiedades de clase id y

radius también deben declararse explícitamente.

En ActionScript 2.0 también se permite definir interfaces, lo que permite refinar los programas orientados a objetos con protocolos definidos formalmente para la comunicación entre objetos.

Page 11: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

El objeto de clase de ActionScript 3.0

Un paradigma común de la programación orientada a objetos, que se suele asociar con Java y C++, utiliza las clases para definir tipos de objetos. Los lenguajes de programación que adoptan este paradigma también tienden a utilizar clases para crear instancias del tipo de datos definido por la clase. ActionScript utiliza clases para ambos propósitos, pero sus raíces como lenguaje basado en prototipos le añaden una característica interesante. ActionScript crea para cada definición de clase un objeto de clase especial que permite compartir el comportamiento y el estado. Sin embargo, para muchos programadores que utilizan ActionScript, esta distinción puede no tener ninguna consecuencia práctica en la programación. ActionScript 3.0 se ha diseñado de forma que se puedan crear sofisticadas aplicaciones orientadas a objetos sin tener que utilizar, ni si quiera comprender, estos objetos de clase especiales. En esta sección se tratan estos temas en profundidad, para los programadores expertos que deseen utilizar objetos de clase.

En el diagrama siguiente se muestra la estructura de un objeto de clase que representa una clase simple denominada A que se define con la sentencia class A {}:

Cada rectángulo del diagrama representa un objeto. Cada objeto del diagrama tiene un carácter de subíndice para representar que pertenece a la clase A. El objeto de clase (CA) contiene referencias a una

Page 12: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

serie de otros objetos importantes. Un objeto traits de instancia (TA) almacena las propiedades de instancia definidas en una definición de clase. Un objeto traits de clase (TCA) representa el tipo interno de la clase y almacena las propiedades estáticas definidas por la clase (el carácter de subíndice C significa “class”). El objeto prototipo (PA) siempre hace referencia al objeto de clase al que se asoció originalmente mediante la propiedad constructor.

El objeto traits

El objeto traits, que es una novedad en ActionScript 3.0, se implementó para mejorar el rendimiento. En versiones anteriores de ActionScript, la búsqueda de nombres era un proceso lento, ya que Flash Player recorría la cadena de prototipos. En ActionScript 3.0, la búsqueda de nombres es mucho más rápida y eficaz, ya que las propiedades heredadas se copian desde las superclases al objeto traits de las subclases.

No se puede acceder directamente al objeto traits desde el código, pero las mejoras de rendimiento y de uso de la memoria reflejan el efecto que produce. El objeto traits proporciona a la AVM2 información detallada sobre el diseño y el contenido de una clase. Con este conocimiento, la AVM2 puede reducir considerablemente el tiempo de ejecución, ya que generalmente podrá generar instrucciones directas de código máquina para acceder a las propiedades o llamar a métodos directamente sin tener que realizar una búsqueda lenta de nombres.

Gracias al objeto traits, la huella en la memoria de un objeto puede ser considerablemente menor que la de un objeto similar en las versiones anteriores de ActionScript. Por ejemplo, si una clase está cerrada (es decir, no se declara como dinámica), una instancia de la clase no necesita una tabla hash para propiedades añadidas dinámicamente y puede contener poco más que un puntero a los objetos traits y espacio para las propiedades fijas definidas en la clase. En consecuencia, un objeto que requería 100 bytes de memoria en ActionScript 2.0 puede requerir tan sólo 20 bytes de memoria en ActionScript 3.0.

Page 13: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Nota: el objeto traits es un detalle de implementación interna y no hay garantías de que no cambie o incluso desaparezca en versiones futuras de ActionScript.

El objeto prototype

Cada clase de objeto de ActionScript tiene una propiedad denominada prototype, que es una referencia al objeto prototipo de la clase. El objeto prototipo es un legado de las raíces de ActionScript como lenguaje basado en prototipos. Para obtener más información, consulte Historia de la implementación de la programación orientada a objetos en ActionScript.

La propiedad prototype es de sólo lectura, lo que significa que no se puede modificar para que señale a otros objetos. Esto ha cambiado con respecto a la propiedad prototype de una clase en las versiones anteriores de ActionScript, en las que se podía reasignar el prototipo de forma que señalara a una clase distinta. Aunque la propiedad prototype es de sólo lectura, el objeto prototipo al que hace referencia no lo es. Es decir, se pueden añadir propiedades nuevas al objeto prototipo. Las propiedades añadidas al objeto prototipo son compartidas por todas las instancias de la clase.

La cadena de prototipos, que fue el único mecanismo de herencia en versiones anteriores de ActionScript, sirve únicamente como función secundaria en ActionScript 3.0. El mecanismo de herencia principal, herencia de propiedades fijas, se administra internamente mediante el objeto traits. Una propiedad fija es una variable o un método que se define como parte de una definición de clase. La herencia de propiedades fijas también se denomina herencia de clase porque es el mecanismo de herencia asociado con palabras clave como class, extends y override.

La cadena de prototipos proporciona un mecanismo de herencia alternativo que es más dinámico que la herencia de propiedades fijas. Se pueden añadir propiedades a un objeto prototipo de la clase no sólo como parte de la definición de clase, sino también en tiempo de ejecución mediante la propiedad

Page 14: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

prototype del objeto de clase. Sin embargo, hay que tener en cuenta que si se establece el compilador en modo estricto, es posible que no se pueda acceder a propiedades añadidas a un objeto prototipo a menos que se declare una clase con la palabra clave dynamic.

La clase Object es un buen ejemplo de clase con varias propiedades asociadas al objeto prototipo. Los métodos toString() y valueOf() de la clase Object son en realidad funciones asignadas a propiedades del objeto prototipo de la clase Object. A continuación se muestra un ejemplo del aspecto que tendría en teoría la declaración de estos métodos (la implementación real difiere ligeramente a causa de los detalles de implementación):

public dynamic class Object

{

prototype.toString = function()

{

// statements

};

prototype.valueOf = function()

{

// statements

};

}Como se mencionó anteriormente, se puede asociar una propiedad a un objeto prototipo de clase fuera de la definición de clase. Por ejemplo, el método toString() también se puede definir fuera de la definición de clase Object, de la manera siguiente:

Object.prototype.toString = function()

{

Page 15: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

// statements

};Sin embargo, a diferencia de la herencia de propiedades fijas, la herencia de prototipo no requiere la palabra clave override si se desea volver a definir un método en una subclase. Por ejemplo, si se desea volver a definir el método valueOf() en una subclase de la clase Object, hay tres opciones. En primer lugar, se puede definir un método valueOf() en el objeto prototipo de la subclase, dentro de la definición de la clase. El código siguiente crea una subclase de Object denominada Foo y redefine el método valueOf() en el objeto prototipo de Foo como parte de la definición de clase. Como todas las clases heredan de Object, no es necesario utilizar la palabra clave extends.

dynamic class Foo

{

prototype.valueOf = function()

{

return "Instance of Foo";

};

}En segundo lugar, se puede definir un método valueOf() en el objeto prototipo de Foo, fuera de la definición de clase, como se indica en el código siguiente:

Foo.prototype.valueOf = function()

{

return "Instance of Foo";

};Por último, se puede definir una propiedad fija denominada valueOf() como parte de la clase Foo. Esta técnica difiere de las otras en que mezcla la herencia de propiedades fijas con la herencia de prototipo.

Page 16: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Cualquier subclase de Foo que vaya a redefinir valueOf() debe utilizar la palabra clave override. El código siguiente muestra valueOf() definido como una propiedad fija en Foo:

class Foo

{

function valueOf():String

{

return "Instance of Foo";

}

}

El espacio de nombres AS3

La existencia de dos mecanismos de herencia independientes, la herencia de propiedades fijas y la herencia de prototipo, crea un reto interesante para la compatibilidad con respecto a las propiedades y los métodos de las clases principales. La compatibilidad con la especificación del lenguaje ECMAScript en la que se basa ActionScript, requiere utilizar herencia de prototipo, lo que significa que las propiedades y los métodos de una clase principal se definen en el objeto prototipo de esa clase. Por otra parte, la compatibilidad con ActionScript 3.0 requiere utilizar la herencia de propiedades fijas, lo que significa que las propiedades y los métodos de una clase principal se definen en la definición de clase mediante las palabras clave const, var y function. Además, el uso de propiedades fijas en lugar de las versiones de prototipos puede proporcionar un aumento considerable de rendimiento en tiempo de ejecución.

ActionScript 3.0 resuelve este problema utilizando tanto la herencia de prototipo como la herencia de propiedades fijas para las clases principales. Cada clase principal contiene dos conjuntos de propiedades y métodos. Un conjunto se define en el objeto prototipo por compatibilidad con la especificación ECMAScript

Page 17: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

y el otro conjunto se define con propiedades fijas y el espacio de nombres AS3.0 por compatibilidad con ActionScript 3.0.

El espacio de nombres AS3 proporciona un cómodo mecanismo para elegir entre los dos conjuntos de propiedades y métodos. Si no se utiliza el espacio de nombres AS3, una instancia de una clase principal hereda las propiedades y métodos definidos en el objeto prototipo de la clase principal. Si se decide utilizar el espacio de nombres AS3, una instancia de una clase principal hereda las versiones de AS3, ya que siempre se prefieren las propiedades fijas a las propiedades de prototipo. Es decir, siempre que una propiedad fija está disponible, se utilizará en lugar de una propiedad de prototipo con el mismo nombre.

Se puede utilizar de forma selectiva la versión del espacio de nombres AS3 de una propiedad o un método calificándolo con el espacio de nombres AS3. Por ejemplo, el código siguiente utiliza la versión AS3 del método Array.pop():

var nums:Array = new Array(1, 2, 3);

nums.AS3::pop();

trace(nums); // output: 1,2Como alternativa, se puede utilizar la directiva use namespace para abrir el espacio de nombres AS3 para todas las definiciones de un bloque de código. Por ejemplo, el código siguiente utiliza la directiva use namespace para abrir el espacio de nombres AS3 para los métodos pop() y push():

use namespace AS3;

var nums:Array = new Array(1, 2, 3);

nums.pop();

nums.push(5);

trace(nums) // output: 1,2,5

Page 18: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

ActionScript 3.0 también proporciona opciones de compilador para cada conjunto de propiedades de forma que se pueda aplicar el espacio de nombres AS3 a todo el programa. La opción de compilador -as3 representa el espacio de nombres AS3 y la opción de compilador -es representa la opción de herencia de prototipo (es significa ECMAScript). Para abrir el espacio de nombres AS3 para todo el programa, se debe establecer la opción de compilador -as3 en true y la opción de compilador -es en false. Para utilizar las versiones de prototipos, las opciones de compilador deben establecerse en los valores opuestos. La configuración de compilador predeterminada para Adobe Flex Builder 3 y Adobe Flash CS4 Professional es -as3 = true y -es = false.

Si se pretende ampliar alguna de las clases principales y sustituir algún método, hay que comprender cómo puede afectar el espacio de nombres AS3 a la manera de declarar un método sustituido. Si se utiliza el espacio de nombres AS3, cualquier método sustituto de un método de clase principal también debe utilizar el espacio de nombres AS3, junto con el atributo override. Si no se utiliza el espacio de nombres AS3 y se desea redefinir un método de clase principal en una subclase, no se debe utilizar el espacio de nombres AS3 ni la palabra clave override.

Page 19: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

DIFERENCIAS

Page 20: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

1ª diferencia: Mayúsculas y minúsculas. En AS 1.0, cuando nos referimos a una variable no existe distinción entre mayúsculas y minúsculas. miVariable y Mivarible son la misma. En cambio, en AS 2.0 nos estamos refiriendo a dos variables distintas. Esta regla podemos aplicarla también a cualquier elemento del lenguaje como funciones, movieclips, botones, arrays, etc.

2ª diferencia: Strict Data Typing. En AS 1.0, cuando definimos una variable, Flash automaticamente asigna del tipo de datos que contiene. Es decir, si escribimos miVariable="hola mundo";, Flash interpreta que miVariable contiene datos del tipo cadena o String. En AS 2.0, Flash sigue reconociendo automáticamente el tipo de datos, pero introduce el strict data typing, que nos permite gestionar mejor el tipo de datos que contiene una variable. La sentencia anterior se escribiría var miVariable:String="hola mundo";. Como se ve, la cosa no ha cambiado mucho, simplemente añadimos la palabra clave var y el tipo de datos después del nombre de la variable.

La cuestión es: si Flash reconoce automaticamente el tipo de datos, ¿por qué molestarnos en escribir código de más?

Page 21: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Por varias razones muy interesantes. La primera es que al emplear strict data typing activamos los consejos sobre código, es decir, si definimos un sonido mediante var miSonido:Sound=new Sound();, la próxima vez que introducamos el nombre de la variable, Flash nos mostrará un pequeño desplegable con métodos y propiedades especificos de su tipo de datos.

Otra forma de mostrar los consejos que ya funcionaba en AS 1.0 es añadir un sufijo al nombre de la variable, por ejemplo: miClip_mc, miBoton_btn o miCajaTexto_txt.

En la imagen de la derecha podéis ver como se muestran los consejos sobre código.

Aparte de mostrar los consejos sobre código, otra de las ventajas de usar strict data typing es que nos permite detectar errores en el código. Si erróneamente asignamos un valor que no corresponde con el tipo de datos definido, Flash nos advertirá de este desliz en la ventana salida.

La última razón para acostumbrarse a usar strict data typing es la mejor y la que nos convenció a nosotros para utilizarla es que el reproductor Flash ejecuta el código más rápido si definimos previamente el tipo de datos.

3ª diferencia: Clases de ActionScript. Para desarrollos complejos, la definición de clases personalizadas es el cambio más importante que vamos a encontrar entre AS 1.0 y AS 2.0.

En AS 1.0 para definir una clase coche puede ser así:_global.coche=function(marca, modelo, potencia, combustible){this.marca=marca;this.modelo=modelo;this.potencia=potencia;this.combustible=combustible;}

Page 22: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

En AS 2.0, para definir la misma clase:class coche{var marca:String;var modelo:String;var potencia:Number;var combustible:String;// funcion constructorafunction coche(marca:String, modelo:String, potencia:Number, combustible:String){this.marca=marca;this.modelo=modelo;this.potencia=potencia;this.combustible=combustible;}}

Además en AS 2.0 el código de definición de clase debe ir en un archivo externo llamado coche.as, mientras que en AS 1.0 puede ir dentro de la propia película.

El resto de elementos del lenguaje como condicionales, bucles, control de instancias, etc. se codifican igual en la dos versiones de ActionScript.

Diferencias entre la gestión de eventos en ActionScript 3.0 y en las versiones anteriores

La diferencia principal entre la gestión de eventos en ActionScript 3.0 y en las versiones anteriores radica en que en ActionScript 3.0 hay un único sistema para gestionar eventos, mientras que en las versiones anteriores de ActionScript existían varios. Esta sección comienza con una descripción general de la forma

Page 23: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

en la que funcionaba la gestión de eventos en las versiones anteriores de ActionScript y pasa luego a examinar el modo en que ha cambiado en ActionScript 3.0.

Gestión de eventos en versiones anteriores de ActionScriptLas versiones de ActionScript anteriores a la 3.0 ofrecen diversas formas de gestionar los eventos:

• Controladores de eventos on() que se pueden colocar directamente en instancias de Button y MovieClip.

• Controladores onClipEvent() que se pueden colocar directamente en instancias de MovieClip.• Propiedades de funciones callback, como XML.onload y Camera.onActivity.• Detectores de eventos que pueden registrarse con el método addListener().• La clase UIEventDispatcher que implementaba parcialmente el modelo de eventos DOM.

Cada uno de estos mecanismos presenta sus propias ventajas y limitaciones. Los controladores on() y onClipEvent() son fáciles de usar, pero dificultan el mantenimiento posterior de los proyectos, ya que el código colocado directamente en los botones y clips de películas puede ser difícil de encontrar. Las funciones callback también son sencillas de implementar, pero sólo permiten una función callback por evento. La implementación de los detectores de eventos es más compleja, ya que no sólo es necesario crear un objeto y una función de detector, sino también registrar el detector en el objeto que genera el evento. No obstante, este trabajo adicional permite crear varios objetos detectores y registrarlos todos para el mismo evento.

El desarrollo de componentes para ActionScript 2.0 dio lugar a un nuevo modelo de eventos. Este nuevo modelo, representado por la clase UIEventDispatcher, se basaba en un subconjunto de la especificación de eventos DOM, de modo que, para los desarrolladores que conozcan la gestión de eventos de componentes, la transición al nuevo modelo de eventos de ActionScript 3.0 resultará relativamente sencilla.

Page 24: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Por desgracia, la sintaxis utilizada en los distintos modelos de eventos es igual en algunos casos y diferente en otros. Por ejemplo, en ActionScript 2.0, algunas propiedades, como TextField.onChanged, se pueden usar como función callback o como detector de eventos. Sin embargo, la sintaxis para registrar objetos detectores varía dependiendo de si se utiliza una de las seis clases que admiten detectores en la clase UIEventDispatcher. Para las clases Key, Mouse, MovieClipLoader, Selection, Stage y TextField se debe usar el método addListener(), mientras que para la gestión de eventos de componentes es necesario utilizar un método llamado addEventListener().

Otra complicación introducida por los distintos modelos de gestión de eventos es que el ámbito de la función de controlador de eventos varía ampliamente dependiendo del mecanismo usado. Dicho de otro modo, el significado de la palabra clave this varía entre los distintos sistemas de gestión de eventos.

Gestión de eventos en ActionScript 3.0ActionScript 3.0 presenta un único modelo de gestión de eventos que sustituye a todos los mecanismos que existían en las versiones anteriores del lenguaje. El nuevo modelo de eventos se basa en la especificación de eventos DOM (modelo de objetos de documento) de nivel 3. Si bien el formato de archivo SWF no cumple específicamente con el estándar DOM, existen suficientes similitudes entre la lista de visualización y la estructura de DOM como para posibilitar la implementación del modelo de eventos DOM. Los objetos de la lista de visualización son análogos a los nodos de la estructura jerárquica de DOM y los términos objeto de la lista de visualización y nodo se usan de forma indistinta en este texto.

La implementación de Flash Player y AIR del modelo de eventos DOM incluye un concepto denominado comportamientos predeterminados. Un comportamiento predeterminado es una acción que Flash Player o AIR ejecutan como consecuencia normal de determinados eventos.

Comportamientos predeterminadosNormalmente, los desarrolladores son los responsables de escribir el código que responderá a los eventos. No obstante, en algunos casos un comportamiento está asociado con tal frecuencia a un evento, que Flash

Page 25: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Player o AIR ejecutan automáticamente ese comportamiento a no ser que el desarrollador incluya código para cancelarlo. Flash Player o AIR muestran comportamientos de este tipo de forma automática, por lo que reciben el nombre de comportamientos predeterminados.

Por ejemplo, cuando un usuario escribe texto en un objeto TextField, resulta tan frecuente esperar que el texto se muestre en el objeto TextField que ese comportamiento se incorpora en Flash Player y AIR. Si no se desea que se produzca este comportamiento predeterminado, es posible cancelarlo usando el nuevo sistema de gestión de eventos. Cuando se escribe texto en un objeto TextField, Flash Player o AIR crean una instancia de la clase TextEvent para representar esa entrada de usuario. Si no se desea que Flash Player o AIR muestren el texto en el objeto TextField, es necesario acceder a esa instancia específica de TextEvent y llamar al método preventDefault() de la instancia.

No todos los comportamientos predeterminados se pueden impedir. Por ejemplo, Flash Player y AIR generan un objeto MouseEvent cuando el usuario hace doble clic en una palabra de un objeto TextField. El comportamiento predeterminado, que no se puede impedir, es resaltar la palabra que hay bajo el cursor.

Existen muchos tipos de objetos de eventos que no tienen ningún comportamiento predeterminado asociado. Por ejemplo, Flash Player distribuye un objeto de evento connect cuando se establece una conexión de red, pero no hay ningún comportamiento predeterminado asociado a él. En la documentación de la API referente a la clase Event y sus subclases se enumeran todos los tipos de eventos, y se describen los comportamientos predeterminados asociados, además de indicar si dicho comportamiento se puede impedir.

Es importante comprender que los comportamientos predeterminados sólo están asociados con objetos de eventos distribuidos por Flash Player o AIR y que no existen para objetos de eventos distribuidos mediante programación a través de ActionScript. Por ejemplo, se pueden usar los métodos de la clase EventDispatcher para distribuir un objeto de evento de tipo textInput, pero ese objeto de evento no tendrá ningún comportamiento predeterminado asociado. Es decir, Flash Player y AIR no mostrarán un carácter en

Page 26: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

un objeto TextField como resultado de un evento textInput que se haya distribuido mediante programación.

Novedades de los detectores de eventos de ActionScript 3.0Para los desarrolladores con experiencia en el uso del método addListener() de ActionScript 2.0, puede resultar útil señalar las diferencias entre el modelo de detectores de eventos de ActionScript 2.0 y el de ActionScript 3.0. En la siguiente lista se muestran algunas de las diferencias principales entre los dos modelos de eventos:

• Para añadir detectores de eventos en ActionScript 2.0, es necesario usar addListener() en algunos casos y addEventListener() en otros, mientras que en ActionScript 3.0 siempre se utiliza addEventListener().

• En ActionScript 2.0 no existe el flujo del evento, lo que quiere decir que el método addListener() sólo se puede llamar en el objeto que difunde el evento, mientras que en ActionScript 3.0, el método addEventListener() se puede llamar en cualquier objeto que forme parte del flujo del evento.

• En ActionScript 2.0, los detectores de eventos pueden ser funciones, métodos u objetos, mientras que en ActionScript 3.0 sólo las funciones o los métodos pueden ser detectores de eventos.

Page 27: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

FUNCIONES de cada EVENTO DE RATÓNEVENTO FUNCIÓN

· Press(presionar)Se produce al presionar el botón del ratón mientras el puntero se encuentra sobre el botón.

· Release(soltar)Se produce al soltar, o levantar el dedo, del botón del ratón mientras el puntero se encuentra sobre el botón. (Esto es, el comportamiento estándar de hacer clic).

· Release Outside (soltar fuera)

Se produce al soltar el botón del ratón cuando el puntero se encuentra fuera del área donde está el símbolo del botón.

· Roll Over(sobrepasar)Se produce al desplazar el puntero por encima del botón (sin necesidad de que haga clic).

· Roll Out(sobrepasar y salir)

Se produce al desplazar el puntero fuera del botón. (Esto es, cuando sale del área del símbolo botón y sin que haya presionado el botón).

· Drag Over(arrastrar y salir)

Se produce al presionar el botón del ratón mientras el puntero se encuentra sobre el botón, se desplaza fuera del botón y, a continuación, vuelve a desplazarse sobre el botón.

· Drag Out(arrastrar fuera)

Se produce cuando el botón del ratón se presiona con el puntero sobre el botón y, a continuación, el puntero se desplaza fuera del botón.

· Key Press(presionar tecla)

Se produce al presionar una tecla específica. No es necesario utilizar el ratón

Page 28: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

Page 29: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

BIBLIOGRAFÍA

Page 30: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

http://help.adobe.com/es_ES/ActionScript/3.0_ProgrammingAS3/ WS5b3ccc516d4fbf351e63e3d118a9b90204-7e50.html

http://help.adobe.com/es_ES/ActionScript/3.0_ProgrammingAS3/ WS5b3ccc516d4fbf351e63e3d118a9b90204-7f3f.html

http://help.adobe.com/es_ES/ActionScript/3.0_ProgrammingAS3/ WS5b3ccc516d4fbf351e63e3d118a9b90204-7e50.html

http://es.wikipedia.org/wiki/ActionScript

http://www.cristalab.com/tutoriales/tutorial-de-actionscript-2.0-en-flash-c21l/

http://www.buenastareas.com/ensayos/Action-Script-3/359178.html

Page 31: Action Scrip

[ ] 12 de abril de 2011

Liliana Santiago y Cándido Rodríguez

INSTITUTO DE ESTUDIOS UNIVERSITARIOS

Investigación de Action Script 1, 2 y 3

Que presentan:Karen Liliana Santiago Cruz

Cándido Gilberto Rodríguez González

Asesor:Ing. Israel Morales Reyes

Coatzacoalcos, Veracruz. 12 de

abril de 2011