Comunidad de diseño web y desarrollo en internet online

Error de sintaxis en un If

Citar            
MensajeEscrito el 01 Nov 2005 03:31 pm
Weno, el caso es que estoy haciendo un juego y tengo una duda

Código :

if (_global.vitalidad_luchadoruno == 0


Ese es el if que tengo , es para que cuando la vitalidad del luchadoruno llegue a 0 te lleve a un movieclip etc ... todo eso me funciona perfectamente por lo cual solo pongo el trozo del código en el que tengo la duda.

El caso es que me gustaría poner algo como "<10" , o sea , que se activara cuando en vez de llegar a 0 , la vitalidad sea menor a 10, por eso probé algo como

Código :

if (_global.vitalidad_luchadoruno == <10


Pero no me funciona, quizas sabeis la solucion

a ver si me podeis ayudar
muchísimas gracias !!

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 01 Nov 2005 03:36 pm
primero te falta el parentesis de cierre, ejemplo

if (a ==5){
trace("a es igual a 5");
}


para hacer mayor igual o menor igual es:

if (a<=5){
trace("a es menor o igual a 5")
}
if (a>=5){
trace("a es mayor o igual a 5")
}


saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 01 Nov 2005 11:30 pm
o bien simplemente

Código :

if(variable<5){
trace("menor que 5");
}else if(variable>5){
trace("mayor a 5");
}

en este ejemplo no se tomaria en cuenta el 5, a menos que agregues otra condicion para ver si es igual (==) a 5
Recuerda que el == es para comparacion y el = para asignacion :wink:

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

msie
Citar            
MensajeEscrito el 02 Nov 2005 01:19 am
Oks , pero tng un problema todavía con dicho código:

Código :

if(_global.vitalidad_luchadordos<=50){
   trace("_global.vitalidad_luchadordos es menor o igual a 50")
    }else{
      gotoAndStop(2)
}



Vamos, que pongo ese código y cuando enciendo el juego me lleva directamente al frame 2 ( kizas debería ponerle nombre al frame pero eso es otra historia). Quisiera saber si ese código esta mal o sencillamente tiene que ser por otra cosa.

Muchisimas gracias !!

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2005 01:24 am

Nina escribió:

Oks , pero tng un problema todavía con dicho código:

Código :

if(_global.vitalidad_luchadordos<=50){
   trace("_global.vitalidad_luchadordos es menor o igual a 50")
    }else{
      gotoAndStop(2)
}



Vamos, que pongo ese código y cuando enciendo el juego me lleva directamente al frame 2 ( kizas debería ponerle nombre al frame pero eso es otra historia). Quisiera saber si ese código esta mal o sencillamente tiene que ser por otra cosa.

Muchisimas gracias !!

quiero suponer que al poner _global, estas haciendo referencia a una variable que esta en el nivel 0 o raiz de tu pelicula, intentalo con _root y los puntos y coma (; ) por si acaso :P :

Código :

if(_root.vitalidad_luchadordos<=50){
   trace("_root.vitalidad_luchadordos es menor o igual a 50");
    }else{
      gotoAndStop(2);
}

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

msie
Citar            
MensajeEscrito el 02 Nov 2005 11:49 am
También he probado ese y sigue sin funcionarme ... el caso es que cuando pongo "<50" me lleva al frame 2 automaticamente al encender el juego pero si pongo otra cantidad como "=1" parece como si me diera a que tengo vitalidad 1

Es decir, parece como si mandara la vitalidad global que tengo ahora
... os dejo el AS del mini-juego este por si acaso veis algo extraño, no es muy largo:



Código :

//Vitalidad para ambos luchadores
//***************************************
function iniciarJuego() {
   _global.vitalidad_luchadoruno = 100;
   _global.vitalidad_luchadordos = 100;
   _global.termino_de_atacar = true;
}
//***************************************
if(_global.vitalidad_luchadordos <50){
   trace("_global.vitalidad_luchadordos es menor o igual a 50");
    }else{
      gotoAndStop(2);
}
function atacarLuchador1() {
   //aqui disminuimos la vitalidad del luchador 2
   //le restamos 90
   if (_global.termino_de_atacar) {
      _global.termino_de_atacar = false;
      _global.vitalidad_luchadordos -= 90;
      luchadores_mc.gotoAndPlay("atacarLuchador1");
   }
}
function atacarLuchador12() {
   //aqui disminuimos la vitalidad del luchador 2
   //le restamos 90
   if (_global.termino_de_atacar) {
      _global.termino_de_atacar = false;
      _global.vitalidad_luchadordos -= 90;
      luchadores_mc.gotoAndPlay("atacarLuchador12");
   }
}
function atacarLuchador2() {
   //aqui disminuimos la vitalidad del luchador 1
   //le restamos 1
   _global.vitalidad_luchadoruno -= 1;
   luchadores_mc.gotoAndPlay("atacarLuchador2");
}
atacar_btn.onRelease = function() {
   //llamamos la función que está arriba
   atacarLuchador1();
};
atacar2_btn.onRelease = function() {
   //llamamos la función que está arriba
   atacarLuchador12();
};
//invocamos la primera función, que es la que establece la vitalidad de ambos jugadores en 100.
iniciarJuego();



También he probado a poner en otro frame como AS pero me ocurre lo mismo:

Código :

if(_global.vitalidad_luchadordos <50){
   trace("_global.vitalidad_luchadordos es menor o igual a 50");
    }else{
      gotoAndStop(2);
}

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2005 12:50 pm
Hola, mira, segun lo ke dices y lo ke pude ver en el codigo que pusiste y que supongo que ese bloque de codigo lo debes tener en el primer frame de tu pelicula (si no es asi dimelo), y me gustaria saber si dentro de la funcion iniciarJuego() es el unico lugar donde declaras las variables vitalidad de cada jugador, o las estas declarando en algun otro lugar??, pues te dire que solo necesitas poner _global en el mometo en el que declaras la variable, esto hace que flash las vea en cualquier lugar de la pelicula en la que pongas un bloque de codigo y las utilizes solo con el nombre, sin necesidad de buscar la ruta.

Seria: "_global.varName" y despues puedes acceder a "varName" desde cualquier lugar de la pelicula solo con poner "varName" sin "_global." delante.

Ahora, la condicion "<=50" esta bien puesta, solo que esta claro que si te manda al frame 2 es porque no se esta cumpliendo, pon un trace(vitalidad_luchadordos) antes de la condicion y asi veras el valor de la variable, eso te puede ayudar a encontrar una solucion.

Ahora si no estas declarando las variables vitalidad en ningun otro lugar, solo dentro de la funcion iniciarJuego(), entonces el problema es que en el momento en el que el interprete pasa por la condicion aun las variables vitalidad no existen, y su valor es indefinido, por lo ke la condicion no se cumplira y te enviara al frame 2, eso es porque llamas a la funcion iniciarJuego() que es la que las crearia despues de haber preguntado, y si las definiste en algun otro lugar, pues simplemente verifica cual es el valor inicial de las mismas, que claro esta no es <=50; si no le estas asignando nigun valor al declararlas pues es muy posible su valor sea null, o cualquiera que el interprete le halla asignado.

Bueno espero haberte podido ayudar un poco......., si no explicame mejor las preguntas que te hago para poder entender bien lo ke haces.

S@lu2s.

Por pcreide

25 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Nov 2005 02:51 pm
Sip, esta todo ese AS en el primer Frame.

Lo que no entiendo es como poner el trace (vitalidad_luchadordos) para ver el valor de la variable, tampoco sabría una solución para el 2º caso que pones y posiblemente ese sea el problema que no lee la vitalidad vamos, asi que pasa directamente al 2º frame.

Si teneis alguna solución, no se que mas probar realmente, muchas gracias por la atención !!


EDIT: parece ser que es problema de su lectura, pues creo que al poner por ejemplo ==1 en vez de >=50 me pone la vitalidad a 1.

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2005 03:39 pm
Bueno mira, lo del trace es cencillo

Código :

//Vitalidad para ambos luchadores 
//*************************************** 
function iniciarJuego() { 
   _global.vitalidad_luchadoruno = 100; 
   _global.vitalidad_luchadordos = 100; 
   _global.termino_de_atacar = true; 
} 
//*************************************** 
//
/*la linea siguiente te mostrara el valor que tiene "vitalidad_luchadordos" justo antes de pasar a la condicion*/
trace(vitalidad_luchadordos)
//
if(_global.vitalidad_luchadordos <50){ 
   trace("_global.vitalidad_luchadordos es menor o igual a 50"); 
    }else{ 
      gotoAndStop(2); 
} 
......



Asi podras saber cual es el valor de la variable al entrar en la condicion y darte cuenta de donde podria esa variable haber tomado ese valor, que como te decia antes, si el unico lugar donde declaras esas variables es dentro de la funcion "iniciarJuego()" su valor debe ser "undefined".

Ahora, si esto es asi (que estes declarando solo en la funcion las variables), dime algo, el valor con el que debe comenzar cada una de las dos variables vitalidad es 100 no??, entonces deberias llamar la funcion "iniciarJuego()" en un evento onLoad() o justo despues de la llave que le da fin a la funcion misma:

Código :

function iniciarJuego() { 
   _global.vitalidad_luchadoruno = 100; 
   _global.vitalidad_luchadordos = 100; 
   _global.termino_de_atacar = true; 
}
iniciarJuego();

Eso crearia las variables pero con el valor 100 para cada una como lo dice la funcion, e = tu condicion "<=50" no se cumpliria e irias al frame 2 al comenzar el juego.

Si me puedes explicar un poco mejor como debe funcionar tu juego al iniciarlo, no en cuanto al codigo sino en cuanto a la parte logica, y mas o menos como tienes organizado el codigo, si tienes algo mas a parte de este que mostraste..., me refiero por ejemplo que si seria algo asi:

comienza el juego y los dos jugadores tienen vitalidad 100, presionas un boton y uno de ellos ataca restandole vitalidad al otro y asi sucesivamente hasta que uno de los dos tenga su vitalidad por debajo de un nivel determinado, y de suceder esto ir al frame 2....,
mas menos algo como eso...,

S@lu2s.

Por pcreide

25 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 02 Nov 2005 04:06 pm
Nina sabes que son fotogramas claves(keyframe) y fotogramas simples(frame)?

Tú código ponlo en una capa(layer) superior en el primer fotograma y luego inserta un fotograma simple a donde terminan los otros fotogramas de las inferiores.

Creo que eso solucionará todo...


saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 02 Nov 2005 04:12 pm
Sip , la verdad es que tiene lógica lo de poner lo de iniciarJuego(); justo despues de poner las globales de vida.

El juego es exactamente como lo has descrito.

Aún así he probado todo y sigue sin funcionar, es porque todavía no he podido ver si es "undefined o no, lo mas seguro es que falle eso, no se dnd mirar eso una vez puesto el trace.

Pero vamos, si lo he intentado de la 2º manera y sigue sin funcionar es por eso.

PD; Maikel no se que quieres dcir exactamente, pero si se lo que son.

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2005 04:23 pm
emmm Nina, tienes la condición puesta al reves ^^

Código :

//*************************************** 
if(_global.vitalidad_luchadordos <50)
{ 
   trace("_global.vitalidad_luchadordos es menor o igual a 50"); 
   }
else //Si es mayor que 50, pasa al 2
{ 
      gotoAndStop(2); 
}


Como inicialmente la vitalidad de los luchadores es 100, se cumple que es MAYOR que 50, por lo tanto pasa al frame 2 de manera CORRECTA...

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

opera
Citar            
MensajeEscrito el 02 Nov 2005 04:51 pm

Nina escribió:

Código :

if(_global.vitalidad_luchadordos<=50){
   trace("_global.vitalidad_luchadordos es menor o igual a 50")
    }else{
      gotoAndStop(2)
}



Vamos, que pongo ese código y cuando enciendo el juego me lleva directamente al frame 2


1. El problema es obvio... este código se ejecuta antes de llamar a la función iniciarJuego, por lo tanto el valor de _global.vitalidad_luchadordos es aún undefined. Así, el flujo siempre se va al else, con el consiguiente paso al frame 2.

2. Al comenzar el juego, el código anterior siempre te va a llevar al frame 2, pues a _global.vitalidad_luchadordos le asignas un valor inicial de 100 y luego preguntas que si ese valor es menor o igual a 50... como no lo es, ya sabes la consecuencia. Si el paso al frame 2 debería darse cuando el valor de _global.vitalidad_luchadordos sea menor que 50, entonces debes corregir tu condicional.

3. Finalmente, una vez corregido el condicional, sugiero que coloques ese código dentro de una función que se ejecute en el evento onEnterFrame de la raíz, de modo que constantemente estés comprobando el valor de _global.vitalidad_luchadordos, algo como:

Código :

_root.onEnterFrame = function() {
    if(_global.vitalidad_luchadordos<=50){
     gotoAndStop(2);
    }
}


Espero haberte ayudado en algo...

Saludos.

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

firefox
Citar            
MensajeEscrito el 03 Nov 2005 04:00 pm
Bueno mira, si es asi + o - en lo que consiste tu juego entonces te aconsejo no que llames como te dije a tu funcion iniciarJuego() al final de la declaracion de la misma, mira, mejor has algo como esto:

Código :


/*defines e inicializas en el principo del codigo que pondras en el primer frame de tu pelicula las tres variables con las que trabajaras en tu juego*/

_global.vitalidad_luchadoruno = 100;
_global.vitalidad_luchadordos = 100;
_global.termino_de_atacar = true;

/*despues la funcion que vuelve a poner en dichas variables los mismos valores iniciales*/

function iniciarJuego() {
 vitalidad_luchadoruno = 100;
 vitalidad_luchadordos = 100;
 termino_de_atacar = true;
}

/*puedes tener otra funcion que te compruebe el valor de las variables vitalidad al concluir los ataques, la cual podrias llamar al final de los bloques de cada boton atacar, o sencillamente preguntar por los valores de las mismas dierectamente*/

function comprobarVitalidad() {

//aqui como dice el amigo "MorphX" debes invertir tu condicion.

   if (vitalidad_luchadordos <= 50) {
      gotoAndStop(2);
   }
   else{
      trace("la vitalidad ......");
   }
}

/*aqui iria el resto de las funciones que ya definiste con la funcionalidad que tu le quieras dar*/

...........

/*y en los eventos de los botones*/

atacar_btn.onRelease = function() { 
   //llamamos la función que está arriba 
   atacarLuchador1(); 
  //llamas a la funcion comprobarVitalidad justo en el momento que lo necesitas.
  comprobarVitalidad();
}; 
atacar2_btn.onRelease = function() { 
   //llamamos la función que está arriba 
   atacarLuchador12(); 
  //llamas a la funcion comprobarVitalidad justo en el momento que lo necesitas.
  comprobarVitalidad();
};


Como puedes ver ya no necesitas utilizar _global para referenciar las variables puesto que son globales y las puedes acceder solo con su nombre desde cualquier lugar de tu pelicula a no ser que tengas alguna otra declarada dentro de una funcion con el mismo nombre y quieras referirte a la glogal, pero ya eso es otra cosa.

Tambien pudieses hacer lo ke te decia el amigo ExGaul sobre utilizar el enterFrame de la raiz para mantenerte comprobando la condicion, pero si cuentas con botones que serian capaces de hacer la pregunta justo en el momento exacto no necesitas de un escucha constante como este.

Bueno, espero que ahora si puedas solucionar tu problema, y realmente me gustaria aconsejarte que indagaras un poco sobre como se ejecuta el AS en la pelicula, en que momento como acceder y declarar variables problemas de llamadas antes de tienpo a funciones variables y otro monton de cosas que nos pueden poner un poco locos porque sintaxticamente nos parece bien pero no hace lo que queremos (experiencia propia), pues a pesar de ser un lenguaje que en cuanto a sintaxis es muy parecido o casi = a otros como el C++ en mi caso por ejemplo; la forma en que se organiza el codigo en los frames, clips, btn y todo lo demas hacen un poquito mas complicado todo.

Un ejemplo sencillo podria ser tratar de acceder a una funcion globla definida en el frame 4 de la pelicula desde un bloque de codigo especifico ubicado en cualquier otro lugar cuando aun la cabeza lectora no ha llegado a ese frame, aqui, podria parecernos que la funcion existe y que es una "cabro..." del flash el hecho de que no la ejecute, porque ahy esta definida!!, la estamos viedo al programar!!, pero realmente hasta pasados unas milesimas de seguno de iniciada la ejecucion de la pelicula para que dicho codigo sea interpretado no existira dicha funcion.

Bueno, espero haberte podido ayudar un poco mas ahora....

S@lu2s.

Por pcreide

25 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 06 Nov 2005 01:57 am
Oye que buen TIP has soltado hombre... pues eso de los tiempo.. por asi decirlo no lo sabia... y como yo muchos novatos no tenemos ni idea.. ya decia yo porque algunos codigos mios... no parecen tener HOrrores.. pero no funcionan..

BRavo.. lo anoto en mi librito de apuntes..y muchas gracias. ^^


pcreide dijo:
Bueno, espero que ahora si puedas solucionar tu problema, y realmente me gustaria aconsejarte que indagaras un poco sobre como se ejecuta el AS en la pelicula, en que momento como acceder y declarar variables problemas de llamadas antes de tienpo a funciones variables y otro monton de cosas que nos pueden poner un poco locos porque sintaxticamente nos parece bien pero no hace lo que queremos (experiencia propia), pues a pesar de ser un lenguaje que en cuanto a sintaxis es muy parecido o casi = a otros como el C++ en mi caso por ejemplo; la forma en que se organiza el codigo en los frames, clips, btn y todo lo demas hacen un poquito mas complicado todo.

Un ejemplo sencillo podria ser tratar de acceder a una funcion globla definida en el frame 4 de la pelicula desde un bloque de codigo especifico ubicado en cualquier otro lugar cuando aun la cabeza lectora no ha llegado a ese frame, aqui, podria parecernos que la funcion existe y que es una "cabro..." del flash el hecho de que no la ejecute, porque ahy esta definida!!, la estamos viedo al programar!!, pero realmente hasta pasados unas milesimas de seguno de iniciada la ejecucion de la pelicula para que dicho codigo sea interpretado no existira dicha funcion.

Por J O S

712 de clabLevel

1 tutorial

Genero:Masculino  

Lima, Perú

firefox
Citar            
MensajeEscrito el 06 Nov 2005 03:43 am
Gracias man, y nada para eso estamos, para ayudarnos.....

S@lu2s.

Por pcreide

25 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 06 Nov 2005 10:29 pm
Muchísimas gracias, he podido solucionar mi prolema, ahora el juego va perfectamente.

El caso es que tenía que preguntaros ya que estamos una última cosa.

Si ejecuto un .swf y luego este me ejecuta una película externa q es el .swf del juego" en cuestión , al jugar a este ya no me baja la vitalidad etc...

Sin embargo con el .swf suelto del juego va perfectamente. El caso es que si lo llamo desde el otro ya no va, kizas tengais una solución al problema o me podais explicar que ocurre...

Thanks

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 07 Nov 2005 10:19 pm
En verdad que todavía tengo esa duda , si no no podré seguir con mi proyecto :crap:

Por Nina

31 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 08 Nov 2005 01:13 am
Eso puede estar motivado por el uso de la referencia _root en alguna de tus variables, dado que al cargar tu juego desde otro MovieClip, éste nuevo clip pasa a ser el _root, y por lo tanto pierde el acceso a las variables tal y como las estás referenciando.

Para evitarlo, usa la clausula _parent, para hacer referencia a las variables de un clip superior al que estés programando, y this para las de tu propio clip.

Un saludo...

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

opera

 

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