Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: MRLombardoTL en Marzo 16, 2015, 11:47:00 AM

Título: Auxilio | ¿Como guardo el nivel en donde estaba?
Publicado por: MRLombardoTL en Marzo 16, 2015, 11:47:00 AM
Hola a toda la Comunidad de Game Maker, ¿Como estan?  :D

Amigos, necesito la ayuda de ustedes y es urgente, miren les cuento (Por favor lean todo para que puedan entender mi situación):

Supongamos que yo tengo una room llamada: "MenuPrincipal", en esa room tengo un boton "BotonInciar" que redirige a una room llamada: "SeleccionarNivel"

En "SeleccionarNivel" tengo 30 cuadritos con su respectivo numero, de los cuales el no. 1 esta habilitado, cuando el usuario termina el nivel 1 le aparece un boton que dice: "Felicidades, selecciona otro nivel"

En ese boton tiene un Left Button y dentro de el tengo un Alarm de "01 pasos de 30" y el evento create  tengo:
1. "room_goto(Seleccionar Nivel);"
2. "Change instance: form: "Nivel 2 Bloqueado" to "Nivel 2 Desbloqueado".

Como se podran dar cuenta, los niveles se desbloquean cambiando la instancia a "01 de 30 pasos" (Es tan rapido el cambio que no uno no se da cuenta)


Ahora, navegando un poco por internet encontre estos 2 objetos de "Save and Loading"

Objeto 1: "Save"
Contiene un: "Room Start"
Y dentro de el tiene:

if (file_exists("Save.sav")) file_delete("Save.sav");
var SaveFile = file_text_open_write("Save.sav");
var SavedRoom = room;
file_text_write_real(SaveFile,SavedRoom);
file_text_close(SaveFile);



Objeto 2: "Load"
Contiene un: "Create"
Y dentro de el tiene:

if file_exists("Save.sav")
{
var LoadFile = file_text_open_read("Save.sav");
var LoadedRoom = file_text_read_real(LoadFile);
file_text_close(LoadFile);
room_goto(LoadedRoom)
}
else
{
//do nothing
}


----------------------------------------------------------------------------

Estos 2 archivos de "Save" y "Load" funcionan a la perfección.

Entonces lo que hice fue poner un "Save" en la room: "SeleccionarNivel"
Y el codigo de: "Load" ponerlo en el boton: "BotonIniciar" de la room: "MenuPrincipal"


Y dije: "¡Va! ¡Ya quedo!"

Y cuando los quiero testear, y llego hasta el nivel 2 y cierro el juego y lo vuelvo a abrir, no me aparece que lo deje en el nivel 2.




Pregunta:
¿Alguien tiene sistema de "Save" y "Load" mucho mejor que el mio?
¿Estoy haciendo algo mal?
¿Que puedo hacer?


Esto es algo que me frustra un poco, ya que ayer di de alta mi cuenta de desarrollador de Google Play y esto que necesito es fundamental en mi juego.

De antemano, muchas gracias.

Gracias por leer.
Título: Re:Auxilio | ¿Como guardo el nivel en donde estaba?
Publicado por: Silver_light en Marzo 16, 2015, 12:25:23 PM
CitarHola a toda la Comunidad de Game Maker, ¿Como estan?  :D
Bien, gracias por preguntar, y usted? (?




Vamos, el problema está en cómo se está implementando el Load y el Save.

Lo que hace el código del Save, así como está, es guardar el indice del room "SeleccionarNivel". Entonces no importa cuántas veces cargues tu juego,  Load siempre irá hacia "SeleccionarNivel". Lo cual no nos aporta nada.
Es decir, estás guardando el indice del room, y no los datos que podría contener dicho room.

Entonces si quisieras que se guarden datos más significativos, por ejemplo, la cantidad de niveles desbloqueados, podrías usar un contador que vaya desde 1 a 20 (siendo 20 la cantidad de niveles máxima en tu juego). Luego podrías guardar dicho valor en el archivo de texto para luego leerlo con el Load.

[GML]
if (file_exists("Save.sav"))
    file_delete("Save.sav");

var SaveFile = file_text_open_write("Save.sav");
file_text_write_real(SaveFile,cantidad_de_niveles_desbloqueados);
file_text_close(SaveFile);
[/GML]

Pero claro, el problema radicaría en que cualquiera podría editar el archivo y cambiar el número para adelantarse algunos niveles. Bueno, eso ya puede solucionarse codificando dicho numero con cualquier forma que se te ocurra.

Saludos!