Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: LowHertzs en Marzo 15, 2014, 05:32:19 PM

Título: Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 15, 2014, 05:32:19 PM
Buenas! la verdad que suena bastante fácil pero estoy teniendo muchos problemas con esto. Os explico lo que intento conseguir.

Hasta ahora tengo establecido que cuando llegas al final de un nivel te desbloquee en otra room (donde están todos los niveles) el icono del nivel desbloqueado para poder meterte, es decir si no consigues pasar cierto nivel, se quedaría el icono del botón bloqueado (que es un objeto).

Ahora bien, lo que quiero es, que una vez se haya creado el botón del nivel, al pasar el nivel1 por ejemplo, el botón bloqueado se elimine, quedando solo el del nivel desbloqueado.

Espero que se entienda. Saludos~
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: ocarina en Marzo 15, 2014, 05:41:43 PM
amigo utiliza los archivos .ini
entonces haces

if nivel2=1//osea desbloqueado
{
nivel2=obj_desbloqueado
}
else
{
nivel2=obj_bloqueado
}
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 15, 2014, 05:47:44 PM
Cita de: ocarina en Marzo 15, 2014, 05:41:43 PM
amigo utiliza los archivos .ini
entonces haces

if nivel2=1//osea desbloqueado
{
nivel2=obj_desbloqueado
}
else
{
nivel2=obj_bloqueado
}

Me lío muchísimo con esto, la verdad.

No te quiero molestar pero si me pudieses dar un ejemplo o algo que me pueda ayudar..

Gracias~
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: ocarina en Marzo 15, 2014, 06:13:44 PM
sabes utilizar los archivos ini???
si no sabes te dejo un ejemplo de como se hace
http://www.comunidadgm.org/preguntas-y-respuestas/ayuda-grabar-puntuacion-mas-alta/msg93663/#msg93663 (http://www.comunidadgm.org/preguntas-y-respuestas/ayuda-grabar-puntuacion-mas-alta/msg93663/#msg93663)

ahora si mira!!! al pasar el nivel 1 le pones que guarde en el archivo ini q nivel 2=1 osea desbloqueado 0=bloqueado 1=desbloqueado

entonces cuando entras al menu de seleccion haces los if para cada nivel
if nivel2=1//osea desbloqueado
{
nivel2=obj_desbloqueado
}
else
{
nivel2=obj_bloqueado
}

en el gms en la seccion de ejemplos viene un ejemplo de como hacer esto!!! si lo vez fijate en el codigo de los room ahi esta lo de los archivos ini!!!

Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 15, 2014, 08:38:22 PM
A ver.. no sé que me falta.

He creado un objeto que se llama "obj_niveles" que tiene lo siguiente en el evento create:
ini_open("niveles.ini"); //este metodo busca el archivo scores.ini y si no existe automaticamente locrea
ini_close();//cierra el archivo .ini


Ahora en el Boton (bloqueado) del nivel 2, CREO que debería de poner lo siguiente que me dijiste:

if nivel2=1//osea desbloqueado
{
nivel2=obj_desbloqueado
}
else
{
nivel2=obj_bloqueado
}


Pero no sé que poner, es decir, son variables globales? La verdad que me está costando horrores entender como usar los .inis.
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: penumbra en Marzo 15, 2014, 08:42:01 PM
ini_close();//cierra el archivo .ini
El cierre del ini se debe hacer solamente después de haber terminado las operaciones necesarias, es decir, después de que hayas leído o escrito en él.


El problema es que de momento no tienes idea de cómo está estructurado un archivo INI.

Un archivo INI tiene una o más secciones. Cómo especificas una sección, así
[NIVELES]           //Sección de nombre NIVELES

Una sección consiste de una serie de claves (keys) y valores
nivel1=0       //La clave nivel1 tiene un valor de 0

Al usar inis, no manejas directamente variables de GM, lees o escribes en los valores de las claves. Deberías seguir el tutorial de "saving" que viene incluído con el GM:S, ahí explican cómo trabajar con inis.
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 15, 2014, 09:03:54 PM
A ver.. lo que quiero decir.. al crear el ini:
ini_open("niveles.ini");
ini_write_real( "Niveles" , "Nivel1" , 1 );
ini_write_real( "Niveles" , "Nivel2" , 0 );
ini_close();


Hasta aquí bien, pero no sé como hacer que se lean los datos de si el nivel esta bloqueado VALOR= 0 o si está desbloqueado VALOR= 1 y haga los cambios en los botones.
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: penumbra en Marzo 15, 2014, 09:13:01 PM
ini_read_real(section,key,default) Lee el valor real de la llave indicada con key de la sección indicada como section.  Cuando no existe la llave o la sección se devuelve el valor especificado por default.

El valor de la lectura se lo asignas a una variable en GM y luego pruebas si esa variable es 1 o no
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: ocarina en Marzo 15, 2014, 09:58:51 PM
lo lees asi
primero usa una variable
global.nivel1=ini_read_real("Niveles" , "Nivel1",0);//donde 0 es un numero defalu si no lo encuentra
global.nivel2=ini_read_real("Niveles" , "Nivel2",0);
y asi sucesivamente
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 16, 2014, 02:16:59 AM
Subo un ejemplo del proyecto que estoy intentando hacer para que se entienda mejor..

Estoy echando un vistazo pero me confunde, si uso los .inis para no hacerlo con variables, por qué tengo que mezclarlas?

En fin, dejo el proyecto a ver si le podéis echar un vistazo y decirme donde debo añadir lo que me planteáis.

Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: penumbra en Marzo 16, 2014, 02:25:19 AM
Cita de: LowHertzs en Marzo 16, 2014, 02:16:59 AM
si uso los .inis para no hacerlo con variables, por qué tengo que mezclarlas?

No es estrictamente necesario mezclarlas, pero por ejemplo, comparar valores en un IF es más fácil si esos valores se almacenan en variables. Si no almacenas el valor de una clave de un ini en una variable, el IF se volvería muy enredoso (largo), pero nada impide que así se haga.
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 16, 2014, 12:44:23 PM
Me estoy volviendo loco, de intentos que llevo, y de ver tutoriales en ingles.

Pero a mi me sigue sin funcionar como quiero.

He puesto que en la room "Niveles_1" Salgan los 3 niveles, donde solo el primero está desbloqueado.

En el boton del nivel2 bloqueado puse esto:
Step: ini_open("niveles.ini");
global.niveles=ini_read_real("Niveles" , "Nivel1",0);//donde 0 es un numero defalu si no lo encuentra
ini_close();
ini_open("niveles.ini");
global.niveles=ini_read_real("Niveles" , "Nivel2",0);
ini_close();
ini_open("niveles.ini");
global.niveles=ini_read_real("Niveles" , "Nivel3",0);
ini_close();


if global.niveles is greater than 1
set the sprite to spr_nivel2 with subimage 0 and speed 1


Hasta ahora creo que lo hice como debe de ser, es decir quiero que lea los valores de Nivel1, Nivel2, y Nivel3, en niveles.ini y si es mayor que 1 cambie el sprite del nivel 2 bloqueado a nivel 2 desbloqueado.

Luego hice otro objeto que se llama "obj_desbloquea_nivel" que cuando el "player" colisione con el desbloquee el nivel 2.

ini_open("niveles.ini");
ini_write_real( "Niveles" , "Nivel1" , 1 );
ini_write_real( "Niveles" , "Nivel2" , 1 );
ini_write_real( "Niveles" , "Nivel3" , 0 );
ini_close();


set variable global.niveles to 1

Pero sigue sin funcionar, no sé como hacerlo ya.

Cuando coge el objeto que se supone desbloquea el nivel2 en este caso, no se desbloquea se queda exactamente igual, pero la aplicación no me da ningún fallo.

Dejo el proyecto.. por si queréis mirarlo.
Título: Re:Hacer que cuando se cree un objeto en una room elimine a otro.
Publicado por: LowHertzs en Marzo 16, 2014, 08:13:18 PM
¿Alguien tiene alguna idea?

Gracias~