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

Sintaxis "this"

Estas en el tema de Sintaxis "this" en el foro de Flash y Actionscript en Foros del Web. Saludos! Tengo un movieClip en mi escenario al cual le he puesto de nombre "cuad". En el keyframe número 1 he puesto el siguiente código: ...
  #1 (permalink)  
Antiguo 04/09/2007, 09:37
 
Fecha de Ingreso: marzo-2006
Mensajes: 66
Antigüedad: 11 años, 9 meses
Puntos: 0
Sintaxis "this"

Saludos!

Tengo un movieClip en mi escenario al cual le he puesto de nombre "cuad". En el keyframe número 1 he puesto el siguiente código:

Código:
cuad.onRollOver = function() {
	cuad._alpha = 50;
}
Evidentemente esto funciona perfectamente, al pasar el cursor sobre mi movieClip éste cambia a una transparencia de 50.

¿Pero que sucede si tuviera 50 movieClips? Obviamente no escribiría lo anterior 50 veces, en ese caso haría algo así:

Código:
//Aquí van enlistados todos mis movieClips
array = new Array(cuad);

//Itero sobre cada movieClip
for(i=0;i<array.length;i++) {
	array[i].onRollOver = function() {
            this._alpha = 50;
	}
}

//Todo funciona perfectamente, pordría tener muchos movieClips y todos reaccionarían adecuadamente
Bueno, mi duda ahora es: ¿por qué en ves de "this._alpha = 50" no puedo escribir "array[i]._alpha = 50"?, ¿no es más lógico? (el primer ejemplo sigue esa logica). Incluso puedo escribir "array[0]._alpha = 50" y SI funciona perfectamente. ¿A caso solo puedo referirme a "array[i]" una sola ves?

Agradecería una explicación lo más extensa posible. Gracias!
  #2 (permalink)  
Antiguo 04/09/2007, 10:40
 
Fecha de Ingreso: mayo-2006
Mensajes: 77
Antigüedad: 11 años, 6 meses
Puntos: 1
Re: Sintaxis "this"

Hola

Con este codigo creas una funcion (el trozo de código entre llaves) que se ejecutará en caso de 'rollover'.

Pongamos que haces rollover pasados unos segundos: el valor de 'i' ya no es correcto, (hace rato se cerro el bucle for).

Por eso necesita 'this' ya que se llama a la funcion con la referencia del clip en cuestión.

Un saludo
  #3 (permalink)  
Antiguo 04/09/2007, 11:21
 
Fecha de Ingreso: marzo-2006
Mensajes: 66
Antigüedad: 11 años, 9 meses
Puntos: 0
Re: Sintaxis "this"

Tienes toda la razón. Muchas gracias. Sucede que yo pensaba que el enunciado for() sustituiría TODOS los "array[i]" por "array[0]" y aparentemente los que están dentro de funciones no son reemplazados y cuando se llama a la función obviamente el bucle for() ya terminó, eso no lo sabía.
  #4 (permalink)  
Antiguo 04/09/2007, 19:05
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 10 meses
Puntos: 5
Re: Sintaxis "this"

Esa informacion es incorrecta, los Valores creados y/o modificados por un ciclo for no desaparecen o cambian a menos que sean SOBREESCRITOS(generealmente por el mismo for) o BORRADOS(por el usuario).
Código:
var x:Number;
var posX:Number=0;
var depth:Number=0;

for(x=1; x<=10; x++){
    //trace(x);
    posX+=10;
    depth+=1;
    cuad.duplicateMovieClip(["clip"+x],depth);
    //trace(this.getNextHighestDepth);
    _root["clip"+x]._x = cuad._x+posX;
    _root["clip"+x]._alpha = 10;

    }
no se de donde sacan que desaparecen el valor de la variable.. a menos que la variable fuera local (por ende estando contenida dentro de una funcion) y llamandole desde fuera de la funcion, pero parece ser que no es el caso, puesto que la vriable es global...
__________________


Última edición por cpucpu; 04/09/2007 a las 19:14
  #5 (permalink)  
Antiguo 05/09/2007, 05:38
 
Fecha de Ingreso: mayo-2006
Mensajes: 77
Antigüedad: 11 años, 6 meses
Puntos: 1
Re: Sintaxis "this"

No te acabo de entender, la información si es correcta.

Yo no dije que los valores desaparezcan, dije "el valor de 'i' ya no es correcto" (será de 'array.length' hasta que se modifique nuevamente).

Tu ejemplo no 'ilustra' el caso, ya que no estas utilizando ninguna función con una variable definida fuera.

Prueba añadiendo esto:
Código PHP:
var x:Number;
var 
posX:Number 0;
var 
depth:Number 0;
for (
x=1x<=10x++) {
    
//trace(x);
    
posX += 10;
    
depth += 1;
    
cuad.duplicateMovieClip(["clip"+x], depth);
    
//trace(this.getNextHighestDepth);
    
_root["clip"+x]._x cuad._x+posX;
    
_root["clip"+x]._alpha 10;
    
_root["clip"+x].onRollOver = function() {
        
this._alpha 50;
        
trace(x+" no he desaparecido, pero no soy correcto");
    };

Y, ya puestos, si se quiere hacer referencia al valor aportado en el bucle de creación, basta con "fijar" el valor de 'x' en ese momento, copiandolo a una variable del propio MC:

Código PHP:
var x:Number;
var 
posX:Number 0;
var 
depth:Number 0;
for (
x=1x<=10x++) {
    
//trace(x);
    
posX += 10;
    
depth += 1;
    
cuad.duplicateMovieClip(["clip"+x], depth);
    
//trace(this.getNextHighestDepth);
    
_root["clip"+x]._x cuad._x+posX;
    
_root["clip"+x]._alpha 10;
    
_root["clip"+x].it x;   // creamos una variable con el valor de x 
    
_root["clip"+x].onRollOver = function() {
        
this._alpha 50;
        
trace(this.it);
    };

Un saludo
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 11:59.