Comunidad de diseño web y desarrollo en internet online

Pasaje por referencia

Citar            
MensajeEscrito el 05 Ago 2008 03:18 am
Solo eso.

Como logro pasar por referencia en ActionScript?

(Me refiero a que los valores que le paso a la funcion, sean cambiados, si la funcion los varia)

Por arte2003

3 de clabLevel



Genero:Masculino  

Montevideo/Uruguay

firefox
Citar            
MensajeEscrito el 05 Ago 2008 09:04 am
Ahora mismo se me ocurren 3 opciones, pero seguro que hay mas. Puedes:

- Puedes pasarlo por parametros y devolverlo
- Hacer la variable "_global" a toda tu pelicula
- Declararla simplemente fuera de la función.

saludos

Por ur!

256 de clabLevel



 

Barcelona

firefox
Citar            
MensajeEscrito el 05 Ago 2008 10:59 am
Pon el código de lo que quieres hacer para entender bien a que te refieres.
Pero de antemano, si lo que quieres hacer es un setInterval que cambie los parámetros, no se puede.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 06 Ago 2008 05:29 pm
Mmmm.

A ver, como explicarlo.

Supongamos que tengo una instancia de simbolo (personaje1).
Ahora, el personaje 1 tiene una funcion, que la voy a invocar desde mi escena, llamada getStats(), que le debo pasar como parámetros 3 variables.

ins_per1.getStats(a,b,c)

Eso invoca la funcion de mi personaje. La funcion cambia los valores de a, b y c. En a pone el ataque, en b la defensa, y en c la magia (todos valores enteros). El tema es que desde la escena, las variables no cambian, es decir, yo invoco la funcion pero las variables no fueron modificadas cunado voy a verlas en la escena (Es decir NO se mantienen los cambios que hizo la funcion).

Capaz que no se puede en actionscript, estoy programando medio a huevo en flash, pero todos los lenguajes en los que he programado tenian pasaje por referencia: Pascal, Modula, C, C++. Alguien a programado en algo de eso, y sabe de lo que hablo con pasaje por valor y pasaje por referencia, sino va a ser dificil de entender capaz.

Por arte2003

3 de clabLevel



Genero:Masculino  

Montevideo/Uruguay

firefox
Citar            
MensajeEscrito el 06 Ago 2008 06:03 pm
Mira el problema es que al pasar variables a una fución estas pasan como valor no como referencia, a diferencia de si mandas en la función un MovieClip, un botón o algún objeto dinámico:

Código :

var a:Number = 0;

function changeNumber(a:Number):Void{
   
   a++;
   
}

changeNumber(a);

trace(a);


Le has pasado la variable "a", y dentro de la función a este valor se le ha sumado uno, pero sin embargo el trace sigue dando 0, esto se debe a que "a" funcionará como variable local dentro de la función, ahora si decimos esto:

Código :

var a:Number = 0;

function changeNumber():Void{
   
   a++;
   
}

changeNumber();

trace(a);


Podrás ver que "a" si incrementa en uno porque como su scope es global, esta estará presente en cualquier lugar, ahora veamos este otro ejemplo:

Código :

var a:Number = 0;

function changeNumber(){
   
   var a:Number = 0;
   a++;
   
}

changeNumber();

trace(a);


como hemos declarado otra variable a dentro de la función, cuando le sumemos 1, la operación se hará a la variable local de la función y no a la variable global.

en el caso tuyo particular debes dar el camino a la variable porque esta es global dentro del timeline solamente, a no ser que la declares como _global, así que cuando llames a la función que está dentro del clip debes hacer algo como esto:

Código :

function changeNumber():Void{
   
   _root.a++;
   
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 08 Ago 2008 06:24 pm

elchininet escribió:

en el caso tuyo particular debes dar el camino a la variable porque esta es global dentro del timeline solamente, a no ser que la declares como _global, así que cuando llames a la función que está dentro del clip debes hacer algo como esto:

Código :

function changeNumber():Void{
   
   _root.a++;
   
}


Entonces, lo que em estas diceindo es que si le paso el root, el símbolo se da cuenta de que la variable que hablo es la de la escena en la que estoy, y no una variable propia de él?

Por arte2003

3 de clabLevel



Genero:Masculino  

Montevideo/Uruguay

firefox
Citar            
MensajeEscrito el 08 Ago 2008 06:40 pm
Exactamente, de la misma forma que si le pasaras el camino hasta un movieClip, tomaría la variable que hay dentro de este y no la de la raiz ni la local:

Código :

function changeNumber():Void{   

   _root.unMovieCualquiera.a++;   

}


En el caso que la declares global no tienes que darle el camino:

Código :

//---En root
_global.a = 0;

//---Dentro de un movie cualquiera
function changeNumber():Void{   

   a++;   

}


Si tuvieras otra variable creada localmente en la función, tendrías que declararle el _global a tu variable:

Código :

//---En root
_global.a = 0;

//---Dentro de un movie cualquiera
function changeNumber():Void{   
    
    var a:Number = 11;
    _global.a++;   

}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.