AS3 – Etiquetas y fotogramas. CurrentLabels y FrameLabel.

Publicado por Iván Gajate el 26 de marzo de 2009 en AS3, Flash, Tutoriales

Los de Adobe (por fin) han incluido una clase en AS3 para tener cierto manejo sobre las etiquetas (labels) y sus fotogramas. Ahora podemos acceder a las etiquetas que tiene un clip de película y obtener su nombre y su fotograma.

this.currentLabels;

nos devolverá un array de objetos FrameLabel del clip de película actual. Tantos como etiquetas tenga nuestra línea de tiempo.

Cada objeto FrameLabel no es más que un objeto simple con dos propiedades: frame (int) y name (String).

this.currentLabels[0].frame;
this.currentLabels[0].name;

nos devolverá el número de fotograma y el nombre de la primera etiqueta de esa línea de tiempo (el primer elemento es el 0 porque es un Array).

Sin embargo no nos proporcionan ningún método para obtener el número de fotograma de una etiqueta concreta, o al revés, el nombre de la etiqueta de un fotograma concreto.

Pero no cuesta mucho hacerse un par de funciones con un bucle para conseguir esos valores:

package es.yporqueno.utils{

	import flash.display.MovieClip;
	import flash.display.FrameLabel;

	public class McUtils {

		// Devuelve el numero de fotograma de una etiqueta concreta
		// si no hay ninguna etiqueta con ese nombre devuelve -1
		public static function getLabelFrame(path:MovieClip, name:String):int {
			var labels:Array = path.currentLabels;
			for each (var l:FrameLabel in labels) {
				if (l.name == name) {
					return l.frame;
				}
			}
			return -1;
		}

		// Devuelve el nombre de la etiqueta en un fotograma concreto
		// Si no hay ninguna etiqueta en ese fotograma, devuelve null
		public static function getFrameLabel(path:MovieClip, frame:uint):String {
			var labels:Array = path.currentLabels;
			for each (var l:FrameLabel in labels) {
				if (l.frame == frame) {
					return l.name;
				}
			}
			return null;
		}

	}
}

Las he metido en una clase estática de utilidades para facilitar su uso.

Ahora si queremos saber el número de fotograma de la etiqueta “fin“, lo haremos así:

import es.yporqueno.utils.McUtils;

var finFrame:int = McUtils.getLabelFrame(this, "fin");

Y si por el contrario queremos saber el nombre de la etiqueta del fotograma 5:

import es.yporqueno.utils.McUtils;

var etiqueta:String = McUtils.getFrameLabel(this, 5)

Hay que pasarle como primer parámetro el clip donde quiero que busque la etiqueta, puede ser this o cualquier película del escenario por supuesto.

Esto tiene muchísima utilidad, por ejemplo para comprobar si ya he pasado cierto fotograma, o para insertar código dinámicamente en un fotograma mediante addFrameScript, un método indocumentado que explica estupendamente Dani Llops en su blog.

Ojo!, el método addFrameScript tiene base 0 (el primer fotograma es el 0, no el 1), por lo que para insertar código en el fotograma 5 habrá que poner

this.addFrameScript(4, stopFinal);

function stopFinal():void{
	stop();
}

Descargar la clase McUtils.as

Descargar todo el paquete es.yporqueno

 

Los comentarios están cerrados.