Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: ¿Esto no produce un bucle de memoria?  (Leído 645 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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
Código: [Seleccionar]
game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida

obj_Control

PRESS O-KEY
Código: [Seleccionar]
///Reiniciar juego
game_restart()

PRESS P-KEY
Código: [Seleccionar]
/// 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?

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Clamud

Respuesta #1 en: Enero 05, 2018, 05:12:15 am
Si siempre se guarda en el mismo archivo no se consumirá más memoria.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Naitsabes0

Respuesta #2 en: Enero 06, 2018, 01:19:22 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.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado brunoxzx

Respuesta #3 en: Enero 06, 2018, 03:30: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í...

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Naitsabes0

Respuesta #4 en: Enero 06, 2018, 10:40:46 pm
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
Código: [Seleccionar]
game_save("guardar.sav")
global.vida = global.limite_vida
global. vida_npc = global.limite_vida

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Jucarave

  • Ganador Proyecto Nexo
  • Beta-tester
  • Adicto
  • *
  • Puntos: 431
  • Mensajes: 488
  • Agradecido: 27 veces
  • Sexo: Masculino
  • De regreso con un nuevo proyecto
    • Ver Perfil
    • Jucarave Games
Respuesta #5 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í:

// 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;

Saludos

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Naitsabes0

Respuesta #6 en: Enero 07, 2018, 04:03:29 am
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í:

// 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;

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.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo