Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: matiascarpello en Agosto 06, 2015, 10:11:14 PM

Título: Ayuda - Que un objeto no aparezca más una vez agarrado.
Publicado por: matiascarpello en Agosto 06, 2015, 10:11:14 PM
Hola comunidad.

Quiero implementar lo siguiente pero no se como hacerlo:

Se los explico:

En mi juego se pueden recoger unas monedas. Son 3 monedas por cada nivel. Cuando se recoge una moneda esta se destruye. Lo que quisiera es que se cumpla esta doble condición: si se recogió la moneda y si se completo el nivel, las monedas recogidas no vuelvan a aparecer en ese nivel. Pero si recogió las monedas pero el nivel no se completo, entonces que estas sigan estando en el nivel.

Datos a tener en cuenta:

* En mi juego utilizo un solo objeto de moneda para poner 3 de ellas en cada nivel. No es que son 3 objetos diferentes para cada moneda.
* No me sirve hacer la room persistente, así que esa salida esta descartada.

Con este código se puede hacer que el objeto no aparezca más una vez agarrado, pero no me sirve para que cumpla la segunda condición de si el nivel fue superado.

Igual se los comparto

//create event del obj_coin//
/////////////////////

ini_open("coins.ini");
if ini_read_real('room: '+string(room),'x: '+string(xstart)+'; y: '+string(ystart),0) = 1
{
instance_destroy();
ini_close();
}
else
{
ini_write_real('room: '+string(room),'x: '+string(xstart)+'; y: '+string(ystart),0);
}
ini_close();


//destroy event del obj_coin//
///////////////////////

ini_open("coins.ini");
ini_write_real('room: '+string(room),'x: '+string(xstart)+'; y: '+string(ystart),1);
ini_close();

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Título: Re:Ayuda - Que un objeto no aparezca más una vez agarrado.
Publicado por: penumbra en Agosto 06, 2015, 10:35:14 PM
Si el hacer la habitación persistente no es una opción, entonces se tendrá que buscar una solución alternativa para guardar el estado de la habitación y las monedas (que en esencia es lo que hace una habitación persistente). Una opción sería recurrir a archivos ini/texto para guardar el estado de la habitación (completado o no) y el número de monedas recogidas.

Usar inis implica que en el archivo se tendrías que tener una clave por cada nivel. Al comienzo del juego  se revisaría el número de nivel (una variable de  GM), se consultaría ese número en el ini, se pregunta si ese nivel ha sido completado (si tiene un 0 o un 1). Si tiene un 0 no estaría completado y tendrías que crear las tres monedas, y si se completo (tiene un 1), pues no se  crea nada. Por lo que dices, no es necesario usar el ini para guardar el número de monedas de cada nivel porque sólo importa si el nivel se ha completado o no, y de no haberse completado, las monedas aparecerían nuevamente.

Otro método que se me ocurre sería usar ds_lists y ds_maps para guardar el estado de los niveles, ya que GML permite guardar una estructura de datos en disco y luego volver a leerla.

Yo nunca he usado savegames, así que desconozco si este método guarda el estado de la habitación y el número de monedas o no.

EDITADO:
el ini tendría que tener algo así:

[NIVELES]
nivel1 = 1
nivel2 = 0
nivel3 = 0
nivel4 = 0

Usarías una variable en GM, por ejemplo "nivel", la cual, en cada evento ROOM START se actualice al número de nivel según la habitación en la que se este. Luego, para preguntar si el nivel actuál ha sido completado o no:

[gml]
ini_open(guardado.ini)
completado = ini_read_real("NIVELES", "nivel" + string(nivel), 0)
ini_close()
[/gml]

y luego en GM preguntas si el nivel se completó o no
[gml]
if !completado
     //crear instancias de monedas
[/gml]

Lo que faltaría es que al completar un nivel, guardes un 1 en la clave correspondiente en el ini, que es igual al código de arriba, pero cambiando obviamente ini_read_real por ini_write_real y el 0 por un 1
Título: Re:Ayuda - Que un objeto no aparezca más una vez agarrado.
Publicado por: Clamud en Agosto 06, 2015, 11:51:45 PM
Revisa este tema: http://www.comunidadgm.org/preguntas-y-respuestas/recordar-objetos-encontrados-segun-nivel-(solucionado)/ (http://www.comunidadgm.org/preguntas-y-respuestas/recordar-objetos-encontrados-segun-nivel-(solucionado)/)