Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: arcangelcaos en Enero 24, 2016, 05:57:50 PM

Título: Pregunta sobre If
Publicado por: arcangelcaos en Enero 24, 2016, 05:57:50 PM
Me surge una duda, yo tengo una variable que puede llegar a tener hasta 50 valores.

la cosa es que dependiendo del valor, se obtiene otra, pero no quiero usar un swith, porque si no se me van un monton de línea hacia abajo y es molesto.
Un if y como yo lo conozco me pasa lo mismo
if posición = 1 or posición = 3, or posición=7...... asi hasta las que dependa, se me hace largo.

Se podría poner algo asi?

if posición =1 or 3 or 5... etccc

Esa es mi duda
Título: Re:Pregunta sobre If
Publicado por: elviskelley en Enero 24, 2016, 06:04:33 PM
NO. por que tomara =3 como una variable y te dira que no reconoce a 3 como variable.
Para ahorrar codigo te recomiendo usar listas o arrays seguro logras hacerlo mejor.
Ademas debes aprender a usarlos por que ningun script puede tener mas de 16 argumentos.
Tambien podrias usar > < ejem: if posicion >0 and posicion < 7 then {acciones}
Título: Re:Pregunta sobre If
Publicado por: arcangelcaos en Enero 24, 2016, 06:21:24 PM
Gracias otra vez.
Pero no creo que me sirva, o no lo veo.

Yo uso esa variable  "posición", para determinar la posición de una conversación, osease, que con esa variable elige el texto de un ini, y muestra el texto en pantalla, y para que vaya avanzando, cada cierto rato hago aumente en uno.
Pero lo que quiero es que muestre un sprite diferente según ese valor, un sprite que representa a quien habla, y no me vale entre y hasta. Bueno, veré como lo hago.

Gracias.
Título: Re:Pregunta sobre If
Publicado por: kostra en Enero 24, 2016, 06:45:54 PM
switch posición {
   case 1:
      //blabla
      break;
   case 3:
      //blbla
      break;
   case 5:
      //blabla
      break;
   }
Título: Re:Pregunta sobre If
Publicado por: arcangelcaos en Enero 24, 2016, 07:15:20 PM
Cita de: kostra en Enero 24, 2016, 06:45:54 PM
switch posición {
   case 1:
      //blabla
      break;
   case 3:
      //blbla
      break;
   case 5:
      //blabla
      break;
   }

Si eso es lo que decía, no quiero usar un switch, dado que hay conversaciones que tiene como 50 diálogos, por lo tanto, sería 50 case.
Haber, que es fácil, pero yo era por si había alguna manera más "resumida" de hacerlo.

Gracias.
Título: Re:Pregunta sobre If
Publicado por: Clamud en Enero 24, 2016, 11:43:44 PM
También podrías indicar los sprites dentro del ini, para no poner muchos ifs. En un artículo leí que los ifs no son tan rápidos como parecen y es mejor evitarlos, en lugar de poner muchos ifs es más rápido usar switch, y es más eficiente usando el yoyo compiler.
Título: Re:Pregunta sobre If
Publicado por: bygdle en Enero 25, 2016, 12:08:24 AM
Se me acaba de ocurrir una idea, hablando de motocicletas y algodon de azúcar xD
Digamos que tienes la variable que quieres comprobar, y los diferentes valores en un .INI así

[Algo]
var1=resultado
var2=resultado
var3=resultado

Y pones algo así
[GML]
ini_open("algo.ini")
Resultado = ini_read_real("algo","var"+string(posicion), 0)
[/GML]

Así tendrás predefinido el valor de la variable resultado dependiendo del valor almacenado en el ini
Título: Re:Pregunta sobre If
Publicado por: arcangelcaos en Enero 25, 2016, 12:32:48 AM
Cita de: NiuWeb en Enero 25, 2016, 12:08:24 AM
Se me acaba de ocurrir una idea, hablando de motocicletas y algodon de azúcar xD
Digamos que tienes la variable que quieres comprobar, y los diferentes valores en un .INI así

[Algo]
var1=resultado
var2=resultado
var3=resultado

Y pones algo así
[GML]
ini_open("algo.ini")
Resultado = ini_read_real("algo","var"+string(posicion), 0)
[/GML]

Así tendrás predefinido el valor de la variable resultado dependiendo del valor almacenado en el ini

Jajaja, si asi es como lo tengo, pero estoy diseñando el juego que cuando se dialoga, aparcen unos sprites representando a la persona que habla.
Entonces, es que se dibuje el sprite según el valor de "posición".

Tengo este en una alarma
posición+=1
ini_open(global.Idioma)
texto = ini_read_string("HISTORIAGRANJA",string(posicion),"a")
ini_close()
alarm[1])=room_speed*5


EVENTO DRAW
draw_text(x,y, texto)
if posición = 1 or posición= 5 or posición = 7  (AQUI ES donde pongo todas las posibilidades)
{Spr = SprCaballero}
if posición = 2 or posición=4 ......etc
{Spr = SprGranjero}
if posición=15 or posición= 18
{Spr = SprSoldado}

draw_sprite(Spr,0,x,y,)


lo que quería es ahorrarme todo esos if, dado que en alguna conversaciones pueden llegar a tener 50 o más, y un switch se haría tedio hacia abajo, y en if también.
Título: Re:Pregunta sobre If
Publicado por: josevi77 en Enero 25, 2016, 12:54:25 AM
No puedes poner en el archivo las dos variables?
Texto, sprite,y luego leerlas?

Pd: solo un novato responde con preguntas jajaja.
Título: Re:Pregunta sobre If
Publicado por: Iros en Enero 25, 2016, 01:42:54 AM
arcangelcaos, si vas a seguir usando ese método te recomiendo que uses Switch Case ya que tenes varias "posiciones". El Switch Case tiene ventaja sobre el IF ya que si se quiere acceder al Case 35 por dar un ejemplo iría automáticamente hasta el Case 35, en cambio si usas IF tiene que recorrer IF por IF (sin importar si se usa ELSE IF) hasta dar con posición == 35 lo que hace que la performance se vea realmente afectada. Por más que no te guste tener muchas líneas de código, si realmente queres lograr optimización, te recomiendo aguantarte todo ese desastre y utilizar Switch Case.
Título: Re:Pregunta sobre If
Publicado por: bygdle en Enero 27, 2016, 01:17:00 AM
Venga!
Casi se me olvida este tema xD, estaba en el móvil y no te pude contar mis malévolos planes xD
Con el .INI me refiero a OTRO ini, aparte del que tengas.
Es decir, que en vez de poner:
[gml]
if posicion = 1 or posicion= 5 or posicion = 7  (AQUI ES donde pongo todas las posibilidades)
{Spr = SprCaballero}
if posicion = 2 or posicion=4 ......etc
{Spr = SprGranjero}
if posicion=15 or posicion= 18
{Spr = SprSoldado}
[/gml]

Sólo creas un .INI algo así:

[algo]
pos1="sprCaballero"
pos2="sprGranjero"
pos4="sprGranjero"
pos5="sprCaballero"
pos7="sprCaballero"


Y en el código pones:
[gml]
ini_open("el_ini_de_arribita.xD")
spr = ini_read_string("algo","pos"+string(posicion),"blabla");
ini_close();
[/gml]

Obviamente el valor almacenado en el .INI no puede ser una string, sino un número identificador del sprite, y en vez de ini_read_string, deberías poner un ini_read_real (supongo) :v
Título: Re:Pregunta sobre If
Publicado por: arcangelcaos en Enero 27, 2016, 08:17:06 AM
Gracia, pero no se si llegaria a ser viable. Porque tengo como 20 o 30 conversaciones, en cada una spriter diferentres u órdenes diferentes. Asi que hacer un ini con todo eso seria tedioso.