Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Naitsabes0 en Enero 04, 2018, 11:25:08 PM

Título: ¿Esto no produce un bucle de memoria?
Publicado por: Naitsabes0 en Enero 04, 2018, 11:25:08 PM
Pues tengo 2 objetos, uno es un checkpoint, por haci decirlo un objeto que guarda automáticamente al colisionar y el otro un controlador que me permite volver al ultimo punto, pero ¿Esto no esta creando un bucle infinito de memoria que se va consumiendo? es decir si me quedo en la misma posición que el obj_Guardar ¿ estaré saturando la memoria y que ademas no tengo un mecanismo que elimine los viejos guardados?

obj_Guardar

COLLISION_objJugador

game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida


obj_Control

PRESS O-KEY

///Reiniciar juego
game_restart()


PRESS P-KEY

/// Reiniciar
//game_restart();
audio_stop_all()
audio_play_sound(snd_Why_Did_You_Do_It,0,1);
game_load("guardar.sav");


¿Esta mal optimizada esta forma de guardar?
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: Clamud en Enero 05, 2018, 05:12:15 AM
Si siempre se guarda en el mismo archivo no se consumirá más memoria.
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: Naitsabes0 en Enero 06, 2018, 01:19:22 AM
Cita de: Clamud en Enero 05, 2018, 05:12:15 AM
Si siempre se guarda en el mismo archivo no se consumirá más memoria.
Pues lo tengo como "guardar.sav" ¿no estaré creando infinitamente ese archivo? ya que no tengo ningún comprobante que elimine el ultimo "guardar.sav", por eso creo que este código esta incompleto, por el bucle.
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: brunoxzx en Enero 06, 2018, 03:30:15 AM
Cita de: Naitsabes0 en Enero 06, 2018, 01:19:22 AM
Cita de: Clamud en Enero 05, 2018, 05:12:15 AM
Si siempre se guarda en el mismo archivo no se consumirá más memoria.
Pues lo tengo como "guardar.sav" ¿no estaré creando infinitamente ese archivo? ya que no tengo ningún comprobante que elimine el ultimo "guardar.sav", por eso creo que este código esta incompleto, por el bucle.
Sí hombre, eso solo reemplaza el archivo no habrá ningún problema... como ya dijo @Clamud.

¿Pero porque no pones mejor una alarma que guarde tu juego cada cierto tiempo? no creo que sea optimo guardar el juego en cada colisión, o tal vez que si colisionas sí guarde pero no pueda guardar más de una vez cada 5 segundos, algo por allí...
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: Naitsabes0 en Enero 06, 2018, 10:40:46 PM
Cita de: brunoxzx en Enero 06, 2018, 03:30:15 AM
Cita de: Naitsabes0 en Enero 06, 2018, 01:19:22 AM
Cita de: Clamud en Enero 05, 2018, 05:12:15 AM
Si siempre se guarda en el mismo archivo no se consumirá más memoria.
Pues lo tengo como "guardar.sav" ¿no estaré creando infinitamente ese archivo? ya que no tengo ningún comprobante que elimine el ultimo "guardar.sav", por eso creo que este código esta incompleto, por el bucle.
Sí hombre, eso solo reemplaza el archivo no habrá ningún problema... como ya dijo @Clamud.

¿Pero porque no pones mejor una alarma que guarde tu juego cada cierto tiempo? no creo que sea optimo guardar el juego en cada colisión, o tal vez que si colisionas sí guarde pero no pueda guardar más de una vez cada 5 segundos, algo por allí...

porque si el juego me guarda la partida 1s antes que el jugador muera por una caída inminente, volveré a aparecer en el segundo de la caída una y otra vez, así el jugador perderá infinitamente obligando a iniciar una nueva partida por una mala decisión de desarrollo, al final seria culpa mía por hacer ese pésimo sistema de guardado, en cambio con el checkpoint, permito que el jugador cargue la partida en una zona segura donde no morirá hasta que salga de hay, de esta forma cualquier muerte sera solamente culpa de el por su falta de habilidad.

por otro lado ¿como debería hacer el código del obj_Guardar para que se active el guardado por colisión en "X" tiempo?

Tengo un solo evento que hace...

COLLISION_ObjJugador

game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: Jucarave en Enero 06, 2018, 11:03:42 PM
Puedes crear una variable tipo "global.ultimo_guardado" y asignarle el id del guardado en el evento de colisión y ya con eso verificas si fue el ultimo en el que estaba o no, algo así:

[GML]
// Si la ultima vez que guardamos fue aca, entonces nos salimos
if (global.ultimo_guardado == id) { exit; }

game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida

// Decimos que este es el ultimo guardado
global.ultimo_guardado = id;
[/GML]

Saludos
Título: Re:¿Esto no produce un bucle de memoria?
Publicado por: Naitsabes0 en Enero 07, 2018, 04:03:29 AM
Cita de: Jucarave en Enero 06, 2018, 11:03:42 PM
Puedes crear una variable tipo "global.ultimo_guardado" y asignarle el id del guardado en el evento de colisión y ya con eso verificas si fue el ultimo en el que estaba o no, algo así:

[GML]
// Si la ultima vez que guardamos fue aca, entonces nos salimos
if (global.ultimo_guardado == id) { exit; }

game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida

// Decimos que este es el ultimo guardado
global.ultimo_guardado = id;
[/GML]

Saludos
Creo que esta complicando las cosas agregando cosas de "ID", se supone que al darle game_load todo vuelve a como estaba antes, al menos en el ultimo lugar que se activo el game_save, no me queda claro en que evento o objeto deberia estar esto, creo que agregar una simple alarma 0 que evite que colisione 30 veces por segundos, la cual es la velocidad de step por defecto que tiene el juego, seria lo mas optimo en este caso.

Imagina que es un palo con bandera abajo, el jugador la toca y la bandera esta arriba, la bandera permanece arriba porque el jugador ya toco el chekpoint o punto de guardado, y esta solo vuelve a estar abajo cuando el jugador toca el mismo objeto en otro lugar, por algo se llamaría ultimo punto de guardado.