Foros del Web » Creando para Internet » Flash y Actionscript »

Función que asigna/cambia propiedades/atributos de un objeto.

Estas en el tema de Función que asigna/cambia propiedades/atributos de un objeto. en el foro de Flash y Actionscript en Foros del Web. Saludos cordiales a todos espero que esto sea de utilidad, comento un poco como se me ocurrió, un día un poco agotado de crear un ...
  #1 (permalink)  
Antiguo 09/05/2011, 14:41
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 3
Función que asigna/cambia propiedades/atributos de un objeto.

Saludos cordiales a todos espero que esto sea de utilidad, comento un poco como se me ocurrió, un día un poco agotado de crear un lista de propiedades/atributos que quería cambiar o definir en un constructor, se me ocurrió una rutina que recorriera todo por sí misma independiente de los atributos que se deseen cambiar.


Código ACTIONSCRIPT:
Ver original
  1. //Llamada a función setAtributes
  2. setAtributes(clip, {buttonMode:true, enabled:true, visible:true, alpha:0.1});
  3.  
  4. //
  5. function setAtributes(clipRecibido:*, objRecibido:Object):void{
  6. //clipRecibido es el clip al que se desea realizar cambios.
  7. //objRecibido es el objeto que trae todos los atributos a cambiar más sus valores.
  8. //básicamente es un constructor que está dentro de una clase.
  9.     if(objRecibido){
  10.         for(var id:String in objRecibido){
  11.             var val:Object              = objRecibido[id];
  12.             clipRecibido[id]                    = val;
  13.         }
  14.     }
  15. }

Espero le sea de ayuda alguien.

Saluda Atte.
Claudio Barrera Asencio.
TNS en Computación e Informática.
  #2 (permalink)  
Antiguo 16/06/2011, 08:56
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 3
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

Basados en la misma estructura se me ocurre la siguiente estructura aunque es un poco básica, cree una clase que recibe múltiples Objetos y les asigna Listener, sin necesidad des escribir mucho código.

Código ACTIONSCRIPT:
Ver original
  1. package{
  2.    
  3.    import flash.display.*;
  4.    
  5.    public class Events{
  6.        
  7.        
  8.       public static function addListenerNClips(a:Array, b:Object=null, c:Object=null):void{
  9.          for each (var clip:* in a){  
  10.             addListenerClip(clip, b, c);
  11.          }  
  12.       }
  13.        
  14.       public static function addListenerClip(a:*, b:Object=null, c:Object=null):void{
  15.          var clip:*                           = a;
  16.          if(c){
  17.             setPropClip(clip, c);
  18.          }
  19.          if(b){
  20.             createNewListener(a, b);
  21.          }
  22.       }
  23.        
  24.       public static function addListenerButton(a:MovieClip, b:Object=null, c:Object=null):void{
  25.          var button:*                        = a;
  26.          if(c){
  27.             setPropClip(button, c);
  28.          }
  29.          if(b){
  30.             createNewListener(button, b);
  31.          }
  32.       }
  33.        
  34.       public static function createNewListener(clip:*, obj:Object):void{
  35.          for(var id:String in obj){
  36.             var val:Object                      = obj[id];
  37.             clip.addEventListener(id, val);
  38.          }
  39.       }
  40.        
  41.       public static function setPropClip(clip:*, obj:Object):void{
  42.          if(obj){
  43.             for(var id:String in obj){
  44.                var val:Object                   = obj[id];  
  45.                clip[id]                     = val;
  46.             }
  47.          }
  48.       }
  49.        
  50.       public static function setPropNClips(xClips:Array, obj:Object):void{
  51.          for each (var clip:* in xClips){  
  52.             setPropClip(clip, obj);
  53.          }  
  54.       }      
  55.              
  56.        
  57.    }
  58. }

La clase se utiliza de la siguiente manera:

Código ACTIONSCRIPT:
Ver original
  1. import Events;
  2. //agrego valores a un arreglo, así es mucho más fácil trabajar.
  3. var xClips:Array    = [clip0, clip1, clip2, clip3];
  4. //luego llamo los metodos de la clase sin instanciar no es necesario.
  5. //el primer argumento contiene el arreglo con los clips.
  6. //el segundo argumento contiene un objeto con los Listener a Agregar.
  7. //el tercer argumento contiene un objeto con las propiedades a asignar/modificar del objeto.
  8.  
  9. Events.addListenerNClips(xClips, {mouseDown:funcionDown, rollOver:rollOver}, {enabled:true, disabled:true, color:0xff00ff});
  10.  
  11. function funcionDown(a:MouseEvent):void{
  12.    trace("Down in:", a.currentTarget.name);
  13. }
  14.  
  15. function rollOver(a:MouseEvent):void{
  16.    trace("Over in:", a.currentTarget);
  17. }

Saluda Atte.
Claudio Barrera Asencio.
TNS. en Computación e Informática.
  #3 (permalink)  
Antiguo 16/06/2011, 11:24
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

Hola Claudio !

Excelente aportación, jamás se me hubiera ocurrido.
Ahorras muchas líneas de código y queda muy claro.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #4 (permalink)  
Antiguo 17/06/2011, 07:32
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 3
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

Cita:
Iniciado por jahepi Ver Mensaje
Hola Claudio !

Excelente aportación, jamás se me hubiera ocurrido.
Ahorras muchas líneas de código y queda muy claro.

Un saludote !
Es esa la idea, ésta es la una clase bastante menor de una "superClase", llamada dLoader que es una implementación que tiene muchisímos métodos, engloba métodos de otras clases para obtener muy buenos resultados en rendimiento, la programación íntegra es propia, gracias por tu atención a leer. Espero que le sirva a alguien.

La idea es optimizar tiempo, me toma muy poco tiempo desarrollar cualquier aplicación por que la Librería esta pensada para escribir muy pocas líneas.

Aunque dLoader tiene 1429 líneas.

Saluda Atte.
Claudio Barrera Asencio.
TNS. en Computación e Informática.

Última edición por polo_W12; 17/06/2011 a las 08:20 Razón: me equivoqué al firmar...
  #5 (permalink)  
Antiguo 17/06/2011, 11:48
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

Cita:
Iniciado por polo_W12 Ver Mensaje
Es esa la idea, ésta es la una clase bastante menor de una "superClase", llamada dLoader que es una implementación que tiene muchisímos métodos, engloba métodos de otras clases para obtener muy buenos resultados en rendimiento, la programación íntegra es propia, gracias por tu atención a leer. Espero que le sirva a alguien.

La idea es optimizar tiempo, me toma muy poco tiempo desarrollar cualquier aplicación por que la Librería esta pensada para escribir muy pocas líneas.

Aunque dLoader tiene 1429 líneas.

Saluda Atte.
Claudio Barrera Asencio.
TNS. en Computación e Informática.
Hola Claudio !

Bastante interesante, ¿ porque no montar algún sitio con la documentación de la clase dLoader ?, y compartila con la comunidad, claro si tu lo quieres.

Puedes poner la aportación en el subforo de recursos flash.

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #6 (permalink)  
Antiguo 04/07/2011, 08:41
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 3
Respuesta: Función que asigna/cambia propiedades/atributos de un objeto.

Cita:
Iniciado por jahepi Ver Mensaje
Hola Claudio !

Bastante interesante, ¿ porque no montar algún sitio con la documentación de la clase dLoader ?, y compartila con la comunidad, claro si tu lo quieres.

Puedes poner la aportación en el subforo de recursos flash.

Un saludo y suerte !
Si me parece buena idea... comenzaré a documentar el código... pero igualmente sería bueno saber si alguien la ha utilizado para ir obteniendo un feedback... y saber si está bien encaminada y si le sirvió a alguien...

Saluda Atte.
Claudio Barrera Asencio.
TNS. en Computación e Informática.
  #7 (permalink)  
Antiguo 26/09/2011, 07:57
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 9 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.

Etiquetas: objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.