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

Como trabajar con las variables locales de una funcion afuera de ella

Estas en el tema de Como trabajar con las variables locales de una funcion afuera de ella en el foro de Flash y Actionscript en Foros del Web. Hola a todos! Antes que nada quisiera que sepan que soy principiante en este tema...Estoy haciendo mi primer juego de Flash y es un juego ...
  #1 (permalink)  
Antiguo 29/09/2008, 00:15
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Como trabajar con las variables locales de una funcion afuera de ella

Hola a todos!
Antes que nada quisiera que sepan que soy principiante en este tema...Estoy haciendo mi primer juego de Flash y es un juego de naipes españoles.El juego consta de cuatro jugadores (el usuario y tres IA), los cuatro empiezan el juego con tres cartas cada uno. Recientemente escribí el siguiente código ActionScript en la línea de tiempo principal (mi pregunta viene después del código):

stop();
//Cuando sueltes el "clic" del ratón arriba del botón repartir, que elija un número entre 1 y 12. Este será el número del naipe

repetir_btn.onRelease = function():Void {
for (var i:Number = 0; i<100; i++) {
var nElegirnúmero:Number = Math.floor(Math.random()*12)+1;

//Luego que elija otro número entre 1 y 4. Este será correspondido con la pinta.

var nElegirPinta:Number = Math.floor(Math.random()*4)+1;

//La siguiente variable será usada más tarde.

var nProbarIgualdad1:Number=(nElegirnúmero/nElegirPinta) +nElegirnúmero;

/*Si el primer número elegido no es ni 8 ni 9, que se detengan los bucles y continue. Escribí esto porque en mi juego no se usan esas cartas. Por esta razón utilicé el bucle "for", no me sirven esos números.
*/

if (nElegirnúmero !== 8 && nElegirnúmero !== 9) {
break;
}
}
/*Si el segundo número elegido es por ejemplo "1", que se declare una nueva variable "String" que a su vez contenga la ID de vinculación de un clip de película. Esta ID se armará con el primer número elegido y la palabra "oro" porque el segundo número es "1" .
*/

switch (nElegirPinta) {
case 1 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'de'+' '+'oro'+'_mc');
break;
case 2 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'de'+' '+'copa'+'_mc')
break;
case 3 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'of'+' '+'basto'+'_mc');
break;
case 4 :
var sPrimeraCarta:String = (nElegirSnúmero+' '+'of'+' '+'espada'+'_mc');
break;
default :
trace("error 1");
}
//------------------------------------------------------------------------------------------
/* El código anterior es sólo para una de las doce cartas (recuerden que cada jugador tiene tres cartas), en consecuencia el código se repite doce veces con algunos cambios como nombres de variables, y la sentencia "if". Como ejemplo aquí está el segundo bucle "For".
*/
//------------------------------------------------------------------------------------------

for (var j:Number = 0; j<100; j++) {
var nElegirSnúmero:Number = Math.floor(Math.random()*12)+1;
var nElegirSPinta:Number = Math.floor(Math.random()*4)+1;
var nProbarIgualdad2:Number = (nElegirSnúmero/nElegirSPinta) +nElegirSnúmero;

/* En este caso empleé la variable "nProbarIgualdad1" que había escrito en las líneas anteriores. La coloqué aquí porque quiero que el segundo naipe sea distinto al primero. Si "nElegirnúmero" es igual a "nElegirSnúmero" no tendrá importancia mientras "nElegirPinta" sea distinto a "nElegirSPinta". Si esto no fuera así, tendría por ejemplo dos 4 de oro en el escenario de mi película Flash.
Por otro lado, "nElegirSnúmero" y "nElegirSPinta" pueden ser iguales entre sí, pero sí o sí tienen que ser distintas a "nElegirnúmero" y "nElegirPinta". Utilicé una operación matemática dentro de la variable nProbarIgualdad porque fue el único modo que encontre de lograr que dos números aleatorios se conviertan en uno solo, y pueda este último compararse con otro obtenido de igual modo. No se como comparar dos números con otros dos.
*/

if (nElegirSnúmero !== 8 && nElegirSnúmero !== 9 && nProbarIgualdad2 !== nProbarIgualdad1) {
break;
}
}
switch (nElegirSPinta) {
case 1 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'oro'+'_mc');
break;
case 2 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'copa'+'_mc');

break;
case 3 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'basto'+'_mc');
break;
case 4 :

var sSecondCard:String = (nElegirSnúmero+' '+'de'+' '+'espada'+'_mc');
break;
default :
trace("error 2");
}
//------------------------------------------------------------------------------------------
// La sentencia "if" dentro del último bucle "For" se vuelve muy confusa. Aquí está.
//------------------------------------------------------------------------------------------

if (nElegirMnúmber !== 8 && nElegirMnúmber !== 9 && nProbarIgualdad12 !== nProbarIgualdad11 && nProbarIgualdad12 !== nProbarIgualdad10 && nProbarIgualdad12 !== nProbarIgualdad9 && nProbarIgualdad12 !== nProbarIgualdad8 && nProbarIgualdad12 !== nProbarIgualdad7 && nProbarIgualdad12 !== nProbarIgualdad6 && nProbarIgualdad12 !== nProbarIgualdad5 && nProbarIgualdad12 !== nProbarIgualdad4 && nProbarIgualdad12 !== nProbarIgualdad3 && nProbarIgualdad12 !== nProbarIgualdad2 && nProbarIgualdad12 !== nProbarIgualdad1) {
break;
}
/*Por último, (aún dentro de la función) que se adjunten los clips de película dentro de nuevas variables llamadas mPrimerNaipe, mSegundoNaipe, etc.
*/

var mPrimerNaipe:MovieClip = this.attachMovie(sPrimeraCarta, 'm'+sPrimeraCarta, _root.getNextHighestDepth());
mPrimerNaipe._height = 88.7;
mPrimerNaipe._width = 60;
mPrimerNaipe._x = 290;
mPrimerNaipe._y = 400;
var mSegundoNaipe:MovieClip = this.attachMovie(sSegundaCarta, 'm'+ssSegundaCarta, _root.getNextHighestDepth());
mSegundoNaipe._height = 88.7;
mSegundoNaipe._width = 60;
mSegundoNaipe._x = 370;
mSegundoNaipe._y = 400;
var mTercerNaipe:MovieClip = this.attachMovie(sTerceraCarta, 'm'+sTerceraCarta, _root.getNextHighestDepth());
mTercerNaipe._height = 88.7;
mTercerNaipe._width = 60;
mTercerNaipe._x = 450;
mTercerNaipe._y = 400;
var mCuartoNaipe:MovieClip = this.attachMovie(sCuartaCarta, 'm'+sCuartaCarta, _root.getNextHighestDepth());
mCuartoNaipe._height = 88.7;
mCuartoNaipe._width = 60;
mCuartoNaipe._x = 600;
mCuartoNaipe._y = 410;
mCuartoNaipe._rotation = 270;

//etc...

};
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Quizá este código parezca para los programadores basura. Pero a pesar de eso funciona!!! Ahora viene el problema: Cuando quiero utilizar lo que contiene una variable que se encuentra dentro de la función no puedo hacerlo. Esto debe ser porque es una variable local y estoy fuera de ámbito. ¿Como puedo declarar entonces las últimas variables (como mCuartoNaipe) afuera de la función utilizando los números aleatorios que ésta me calculó?
  #2 (permalink)  
Antiguo 29/09/2008, 04:07
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Respuesta: Como trabajar con las variables locales de una funcion afuera de ella

Si te digo la verdad no me he leído el script pero para usar una variable por todo la haces global:

_global.variable=x;

De esta manera la puede usar por todo.

Espero que te haya servido.
__________________
Chanante!
  #3 (permalink)  
Antiguo 29/09/2008, 04:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como trabajar con las variables locales de una funcion afuera de ella

Cita:
Iniciado por sirguy Ver Mensaje
Si te digo la verdad no me he leído el script pero para usar una variable por todo la haces global:

_global.variable=x;

De esta manera la puede usar por todo.

Espero que te haya servido.

Muchas gracias por tu respuesta! ¿Pero aunque declare una variable dentro de una función puedo utilizar lo que contiene después de cerrar la función si uso "_global"?
  #4 (permalink)  
Antiguo 29/09/2008, 08:30
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Respuesta: Como trabajar con las variables locales de una funcion afuera de ella

Yo creo que sí pero prueba a ver qué pasa.

Un saludo
__________________
Chanante!
  #5 (permalink)  
Antiguo 30/09/2008, 19:51
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como trabajar con las variables locales de una funcion afuera de ella

Cita:
Iniciado por sirguy Ver Mensaje
Yo creo que sí pero prueba a ver qué pasa.

Un saludo
Muchas gracias me re sirvio tu ayuda, de todas maneras me gustaria que miraras el codigo porque es el primero que hago!
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:13.