Ver Mensaje Individual
  #7 (permalink)  
Antiguo 26/09/2011, 07:57
polo_W12
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

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 original
  1. package{
  2.     /*
  3.     dLoader es una clase que agrupa funcionalidades de otras clases.
  4.     Una ventaja es que evita importar N Librerías solo debo importar dLoader y utilizo sus métodos.
  5.     Maneja eventos complejos como evaluación de Listener en los clips.
  6.     Método que simplifica ampliamente la manera en que pueden ser agregados los listener
  7.         permite realizarlo solo en un par de líneas.
  8.         permite quitar todos los listener.
  9.         permite quitar solo uno.
  10.         recolectar todos los clips con nombre en común.
  11.     Version 1.3
  12.     add new features:
  13.         [args is Array or MovieClip]
  14.         addListenerClip
  15.         setPropClip
  16.         changeColor
  17.         outSide
  18.         removeClip
  19.         dispelClip
  20.         bringToFront
  21.     Version 1.4
  22.     optimized trim[bucles]
  23.     */
  24.     import flash.display.*;
  25.    
  26.     import flash.events.*;
  27.    
  28.     public class Events extends MovieClip{
  29.        
  30.         public function Events():void{
  31.             this.addEventListener(Event.ACTIVATE, addedToStage);
  32.         }
  33.        
  34.         private function addedToStage(a:Event):void{
  35.             trace("Events Activated")
  36.         }
  37.        
  38.         public static function addListenerClip(arr:*, list:Object=null, prop:Object=null):void{
  39.             if(arr is Array) for each (var clip:* in arr) addListenerClip(clip, list, prop);
  40.             else{
  41.                 setPropClip(arr, prop);
  42.                 if(list) createNewListener(arr, list);
  43.             }
  44.         }
  45.        
  46.         public static function createNewListener(clip:*, obj:Object):void{
  47.             if(obj) for(var id:String in obj) clip.addEventListener(id, obj[id]);
  48.         }
  49.        
  50.         public static function setPropClip(arr:Object, obj:Object):void{
  51.             if(arr is Array) for each (var clip:* in arr) setPropClip(clip, obj);
  52.                 else if(obj) for(var id:String in obj) arr[id] = obj[id];
  53.         }
  54.        
  55.         public static function setFuncClip(arr:Object, obj:Object=null):void{
  56.             if(arr is Array) for each (var clip:* in arr) setFuncClip(clip, obj);
  57.                 else if(obj) for(var id:String in obj) arr[id].apply(null, obj[id]);
  58.         }
  59.        
  60.     }
  61. }

Ahora como se utiliza.

Código ACTIONSCRIPT:
Ver original
  1. import Events;
  2.  
  3. //He realizado un par de cambios para mejorar la manera de interactuar
  4. //ahora los métodos reciben un clip o un array da igual
  5.  
  6. //Almacena los clips en un Array
  7. var xClips:Array        = [clip0, clip1, clip2];
  8. //agrega un Listener en este caso mouseDown para mouseDown
  9. //modifica / crea una propiedad sino existe en este caso solo modifico ButtonMode a valor true
  10. //y también agrego un método a todos los clips que es ejecuta
  11. //esto lo hago para evitar tener que entrar al clip y agregarle éste método
  12. //la idea es que todo se maneje en un solo fotograma
  13.  
  14. Events.addListenerClip(xClips, {mouseDown:mouseDown}, {buttonMode:true, ejecuta:ejecuta});
  15.  
  16. //recorro con un ciclo iterativo el arreglo de clips
  17. for(var i:uint = 0; i<xClips.length; i++){
  18.     var clip:MovieClip  = xClips[i]
  19.     //disparo el método que he agregado al clip
  20.     //los argumentos que recibe el método son dos
  21.     //por lo que le entrego dos parametros que es el propio clip y el indice del arreglo
  22.     Events.setFuncClip(clip, {ejecuta:[clip, i]});
  23. }
  24.  
  25. function mouseDown(a:MouseEvent):void{
  26.     trace(a.target.name)
  27. }
  28.  
  29. function ejecuta(a:MovieClip, b:Number):void{
  30.     trace(a.name, b);
  31. }

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.