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

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.

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.

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

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]

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.

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

Porque dos iguales "==" y no uno "="? que diferencia hay?


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.