De manera predeterminada, las instancias de símbolos de clip de película de una biblioteca de un documento Flash no se pueden crear dinámicamente (es decir, mediante ActionScript). El motivo de ello es que cada símbolo que se exporta para utilizarlo en ActionScript se suma al tamaño del archivo SWF y se detecta que no todos los símbolos se van a utilizar en el escenario. Por esta razón, para que un símbolo esté disponible en ActionScript, hay que especificar que se debe exportar el símbolo para ActionScript.
Para exportar un símbolo para ActionScript:
-
Seleccione el símbolo en el panel Biblioteca y abra su cuadro de diálogo Propiedades de símbolo.
-
Si es necesario, active la configuración avanzada.
-
En la sección Vinculación, active la casilla de verificación Exportar para ActionScript.
De este modo, se activan los campos Clase y Clase base.
De manera predeterminada, el campo Clase se llena con el nombre del símbolo, eliminando los espacios (por ejemplo, un símbolo denominado "Tree House" se convertiría en "TreeHouse"). Para especificar que el símbolo debe utilizar una clase personalizada para su comportamiento, hay que escribir el nombre completo de la clase, incluido el paquete, en este campo. Si se desea crear instancias del símbolo en ActionScript y no es necesario añadir ningún comportamiento adicional, se puede dejar el nombre de la clase tal cual.
El valor predeterminado del campo Clase base es
flash.display.MovieClip
. Si se desea que el símbolo amplíe la funcionalidad de otra clase de cliente, se puede especificar el nombre de la clase, siempre y cuando dicha clase amplíe la clase Sprite (o MovieClip).
-
Presione el botón Aceptar para guardar los cambios.
Si Flash no encuentra un archivo SWC vinculado o un archivo de ActionScript externo con una definición para la clase especificada (por ejemplo, si no se necesita un comportamiento adicional para el símbolo), se muestra una advertencia:
No se pudo encontrar una definición de esta clase en la ruta de clases, por lo que se generará una automáticamente en el archivo SWF al exportar
.
Se puede pasar por alto esta advertencia si el símbolo de la biblioteca no requiere funcionalidad exclusiva más allá de la funcionalidad de la clase MovieClip.
Si no se proporciona una clase para el símbolo, Flash creará una clase para el símbolo equivalente a la siguiente:
package
{
import flash.display.MovieClip;
public class ExampleMovieClip extends MovieClip
{
public function ExampleMovieClip()
{
}
}
}
Si se desea añadir funcionalidad de ActionScript adicional al símbolo, hay que añadir las propiedades y métodos adecuados a la estructura de código. Por ejemplo, sea un símbolo de clip de película que contiene un círculo con una anchura de 50 píxeles y una altura de 50 píxeles, y se especifica que el símbolo debe exportarse para ActionScript con una clase denominada Circle. El siguiente código, incluido en un archivo Circle.as, amplía la clase MovieClip y proporciona al símbolo los métodos adicionales
getArea()
y
getCircumference()
:
package
{
import flash.display.MovieClip;
public class Circle extends MovieClip
{
public function Circle()
{
}
public function getArea():Number
{
// The formula is Pi times the radius squared.
return Math.PI * Math.pow((width / 2), 2);
}
public function getCircumference():Number
{
// The formula is Pi times the diameter.
return Math.PI * width;
}
}
}
El código siguiente, colocado en un fotograma clave en el Fotograma 1 del documento de Flash, creará una instancia del símbolo y la mostrará en pantalla:
var c:Circle = new Circle();
addChild(c);
trace(c.width);
trace(c.height);
trace(c.getArea());
trace(c.getCircumference());
Este código muestra la creación de instancias basada en ActionScript como una alternativa a arrastrar activos individuales al escenario. Crea un círculo que tiene todas las propiedades de un clip de película, además de los métodos personalizados definidos en la clase Circle. Es un ejemplo muy básico: el símbolo de la biblioteca puede especificar varias propiedades y métodos en su clase.
La creación de instancias basada en ActionScript es eficaz, ya que permite crear de forma dinámica grandes cantidades de instancias, una tarea tediosa si tuviera que realizarse manualmente. También es flexible, pues permite personalizar las propiedades de cada instancia a medida que se crea. Para comprobar ambas ventajas, utilice un bucle para crear de forma dinámica varias instancias de Circle. Con el símbolo y la clase Circle descritos previamente en la biblioteca del documento Flash, coloque el código siguiente en un fotograma clave en el Fotograma 1:
import flash.geom.ColorTransform;
var totalCircles:uint = 10;
var i:uint;
for (i = 0; i < totalCircles; i++)
{
// Create a new Circle instance.
var c:Circle = new Circle();
// Place the new Circle at an x coordinate that will space the circles
// evenly across the Stage.
c.x = (stage.stageWidth / totalCircles) * i;
// Place the Circle instance at the vertical center of the Stage.
c.y = stage.stageHeight / 2;
// Change the Circle instance to a random color
c.transform.colorTransform = getRandomColor();
// Add the Circle instance to the current timeline.
addChild(c);
}
function getRandomColor():ColorTransform
{
// Generate random values for the red, green, and blue color channels.
var red:Number = (Math.random() * 512) - 255;
var green:Number = (Math.random() * 512) - 255;
var blue:Number = (Math.random() * 512) - 255;
// Create and return a ColorTransform object with the random colors.
return new ColorTransform(1, 1, 1, 1, red, green, blue, 0);
}
Esto ilustra la forma de crear y personalizar múltiples instancias de un símbolo rápidamente mediante código. La posición de cada instancia se modifica en función del recuento actual dentro del bucle y cada instancia recibe un color aleatorio mediante la propiedad
transform
(que hereda Circle a través de la ampliación de la clase MovieClip).