Hace unos días participé en un taller de JQuery y me percaté que podía mejorar mi programación así que como estaba inyectado de ideas comencé a hacer mejoras en mi propia programación haciendo de ésta más eficiente la manera en que se trabaja.
Las mejoras a la clase Events, para poder ampliar sus posibilidades, son que al igual que jQuery recibe un elemento o un Array de elementos o en el caso de Flash puede recibir como parámetros Array o Clips...
Clase Events.
Código ACTIONSCRIPT:
Ver originalpackage{
/*
dLoader es una clase que agrupa funcionalidades de otras clases.
Una ventaja es que evita importar N Librerías solo debo importar dLoader y utilizo sus métodos.
Maneja eventos complejos como evaluación de Listener en los clips.
Método que simplifica ampliamente la manera en que pueden ser agregados los listener
permite realizarlo solo en un par de líneas.
permite quitar todos los listener.
permite quitar solo uno.
recolectar todos los clips con nombre en común.
Version 1.3
add new features:
[args is Array or MovieClip]
addListenerClip
setPropClip
changeColor
outSide
removeClip
dispelClip
bringToFront
Version 1.4
optimized trim[bucles]
*/
import flash.display.*;
import flash.events.*;
public class Events extends MovieClip{
public function Events():void{
this.addEventListener(Event.ACTIVATE, addedToStage);
}
private function addedToStage(a:Event):void{
trace("Events Activated")
}
public static function addListenerClip(arr:*, list:Object=null, prop:Object=null):void{
if(arr is Array) for each (var clip:* in arr) addListenerClip(clip, list, prop);
else{
setPropClip(arr, prop);
if(list) createNewListener(arr, list);
}
}
public static function createNewListener(clip:*, obj:Object):void{
if(obj) for(var id:String in obj) clip.addEventListener(id, obj[id]);
}
public static function setPropClip(arr:Object, obj:Object):void{
if(arr is Array) for each (var clip:* in arr) setPropClip(clip, obj);
else if(obj) for(var id:String in obj) arr[id] = obj[id];
}
public static function setFuncClip(arr:Object, obj:Object=null):void{
if(arr is Array) for each (var clip:* in arr) setFuncClip(clip, obj);
else if(obj) for(var id:String in obj) arr[id].apply(null, obj[id]);
}
}
}
Ahora como se utiliza.
Código ACTIONSCRIPT:
Ver originalimport Events;
//He realizado un par de cambios para mejorar la manera de interactuar
//ahora los métodos reciben un clip o un array da igual
//Almacena los clips en un Array
var xClips:Array = [clip0, clip1, clip2];
//agrega un Listener en este caso mouseDown para mouseDown
//modifica / crea una propiedad sino existe en este caso solo modifico ButtonMode a valor true
//y también agrego un método a todos los clips que es ejecuta
//esto lo hago para evitar tener que entrar al clip y agregarle éste método
//la idea es que todo se maneje en un solo fotograma
Events.addListenerClip(xClips, {mouseDown:mouseDown}, {buttonMode:true, ejecuta:ejecuta});
//recorro con un ciclo iterativo el arreglo de clips
for(var i:uint = 0; i<xClips.length; i++){
var clip:MovieClip = xClips[i]
//disparo el método que he agregado al clip
//los argumentos que recibe el método son dos
//por lo que le entrego dos parametros que es el propio clip y el indice del arreglo
Events.setFuncClip(clip, {ejecuta:[clip, i]});
}
function mouseDown(a:MouseEvent):void{
trace(a.target.name)
}
function ejecuta(a:MovieClip, b:Number):void{
trace(a.name, b);
}
Y también he agregado un método a la clase Events que permite que un objeto ejecute algún método que tenga ya sea interno, o en éste caso agregado o modificado/creado en tiempo de Ejecución....
Si a alguna persona le sirve me gustaría saberlo para poder generar mejoras...
Saluda Atte.
Claudio Barrera Asencio.
T.N.S. en Computación e Informática.