Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: pacne en Marzo 24, 2015, 08:08:32 PM

Título: global.?
Publicado por: pacne en Marzo 24, 2015, 08:08:32 PM
Hola comunidad, creo que esto de enseñarse gml es muy costoso, pero me gusta y es adictivo. pero hay cosas que no entiendo, muchas!!!, bueno una pregunta mas de tantas que hago, he creado una variable global.room_existente=(room); que dependiendo la room que este el objeto personaje tenga un arma o otra. mi pregunta es que si puedo hacer de alguna manera para no tenerlo todo en el step, y tener una variable o alguna cosa con todas las pantallas y despues meterlas despues.

if global.room_existente= (rm_nvl1) or (rm_nvl3) or (rm_nvl5) or (rm_nvl7) or (rm_nvl8) or (rm_nvl9) or (rm_nvl10)
................


Gracias
Título: Re:global.?
Publicado por: vitail en Marzo 24, 2015, 08:46:30 PM
Cita de: pacne en Marzo 24, 2015, 08:08:32 PM
Hola comunidad, creo que esto de enseñarse gml es muy costoso, pero me gusta y es adictivo. pero hay cosas que no entiendo, muchas!!!, bueno una pregunta mas de tantas que hago, he creado una variable global.room_existente=(room); que dependiendo la room que este el objeto personaje tenga un arma o otra. mi pregunta es que si puedo hacer de alguna manera para no tenerlo todo en el step, y tener una variable o alguna cosa con todas las pantallas y despues meterlas despues.

if global.room_existente= (rm_nvl1) or (rm_nvl3) or (rm_nvl5) or (rm_nvl7) or (rm_nvl8) or (rm_nvl9) or (rm_nvl10)
................


Gracias

esto seria mejor

EVENTO CREATE
global.currentroom = room
esto hara de que cuando el objeto siempre cheque en que room estas, cuando vayas a utilizar un if por ejemplo, para administrar todos los textos que apareceran en la pantalla por un objeto

EVENTO DRAW
if(global.currentroom == rm_die)
{
    draw_text(x,y,"Perdistes!!");
}


espero que te haya funcionado.
Título: Re:global.?
Publicado por: Iros en Marzo 24, 2015, 08:48:00 PM
El if como lo estás usando está mal, ese código quedaría de la siguiente manera:

[gml]
if (global.room_existente == rm_nvl1 or global.room_existente == rm_nvl3 or global.room_existente == rm_nvl5 or global.room_existente == rm_nvl7 or global.room_existente == rm_nvl8 or global.room_existente == rm_nvl9 or global.room_existente == rm_nvl10) {
   //Acción a realizar.
}
[/gml]

Es más, la variable global "global.room_existente" es realmente innecesaria ya que la variable "room" es accesible por todos los objetos como si fuera una variable global.

Después, con respecto a tu duda, lo mejor es como lo estás haciendo, es la única forma que veo sin que te compliques tanto por lo que recién estás aprendiendo.

Otra cosa, también podes usar "&&" en vez de "and" y "||" en vez de "or" para que no se te haga tanto lío a la hora de leer el IF.
Título: Re:global.?
Publicado por: pacne en Marzo 24, 2015, 08:51:37 PM
Muchas Gracias a los dos, una pregunta de novato, despues del if es mejor ponerlo entre parentesias o sin?? y otra pregunta, porque no tu cada vez igualas las variables con la room?

GRACIAS
Título: Re:global.?
Publicado por: Clamud en Marzo 24, 2015, 08:53:23 PM
No logro entender exactamente lo que quieres. Para hacer que el personaje tenga un arma diferente en cada room puedes usar una estructura switch-case en el evento Room Start que asigne una variable llamada "arma"
[gml]
switch( room )
{
    case rm_nivel1: arma = 1; break;
    case rm_nivel2: arma = 3; break;
    case rm_nivel3: arma = 10; break;
    ...
}
[/gml]
Título: Re:global.?
Publicado por: Iros en Marzo 24, 2015, 08:57:21 PM
Se puede usar el Switch Case pero creo que para alguien que recién comienza con GML y programación es más fácil entender la estructura del IF. Por cierto Clamud, en el Switch Case, después de cada caso te falto el "break;".

pacne, yo puse el "==" en cada comparación porque esa es la estructura correcta del IF, no se puede poner como lo habías puesto vos ya que no estaría comparando correctamente y lanzaría error de sintaxis.
Título: Re:global.?
Publicado por: pacne en Marzo 24, 2015, 08:57:41 PM
Lo que he creado es una variable de cada arma, ejemplo, la arma un global.arma_1= 0, en create del personaje, y en el evento step que si es global.arma_1= 1 entonces aparezca esa arma, y en el codigo de cada room que tiene que aparecer esa arma le pongo global.arma_1= 1, y asi si que me va. si estoy haciendo algo mal me lo decís y me decis el porque, que el porque es lo que mas me interesa.
MUCHAS GRACIAS
Título: Re:global.?
Publicado por: pacne en Marzo 24, 2015, 08:59:51 PM
Porque dos iguales "==" y no uno "="? que diferencia hay?
Título: Re:global.?
Publicado por: Clamud en Marzo 24, 2015, 09:06:49 PM
http://www.comunidadgm.org/preguntas-y-respuestas/diferencia-entre-''-y-'' (http://www.comunidadgm.org/preguntas-y-respuestas/diferencia-entre-''-y-'')
Título: Re:global.?
Publicado por: Iros en Marzo 24, 2015, 09:12:40 PM
Para las armas podes usar un arreglo directamente:

[gml]
global.arma[0] = 1;
global.arma[1] = 0;
global.arma[2] = 0;
global.arma[3] = 0;
global.arma[4] = 0;
/*...
global.arma[n] = 0;*/
[/gml]

De esa forma el código te queda más ordenado y podes verlo ordenado mediante un for en el caso que tengas más de dos armas por escenario y quieras poner cuales son las que tenes:

[gml]
for (i=0;i<4;i+=1) {
     if (global.arma == 1) {
        show_message("Tiene el arma N°"+i+"!);
     }
}
[/gml]

(Repito que el FOR es a mero ejemplo de una pequeña explicación de porque es mejor usar arreglos o array).

Con respecto al "==" es porque así se usa, usar dos signos igual significa comparar, usar uno solo significa asignar.