Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: carry en Septiembre 19, 2014, 06:11:03 AM

Título: Juego en segundo plano
Publicado por: carry en Septiembre 19, 2014, 06:11:03 AM
Buen día a todos. tengo una duda.
Como puedo hacer una mascota virtual que siga funcionando aun cuando el juego este cerrado, que siga creciendo en personaje? o que trabaje en segundo plano?
Gracias a todos por su ayuda!  :)
Título: Re:Juego en segundo plano
Publicado por: penumbra en Septiembre 19, 2014, 06:33:53 AM
hacer eso cuando el juego no se ejecuta es imposible. Lo que puedes hacer es que al cerrar la partida, guardes en un INI la fecha y hora (mediante las funciones de fecha y hora de GM:S), luego, al cargar el juego la próxima vez, se compara la fecha actual con la guardada en el ini, se calcula cuántas horas o días han pasado, y en función de eso, ajustas las estadísticas/parámetros de la mascota.

Dependiendo del juego y su complejidad, tienes que crear fórmulas para indicar el crecimiento de cada parámetro, a mi me gusta meterle comportamientos aleatorios a las fórmulas, para que haya "buena" y "mala" suerte
Título: Re:Juego en segundo plano
Publicado por: carry en Septiembre 20, 2014, 01:05:43 AM
Eso es interesante lo que dices, pero que tipo de comandos podria utilizar para comparar la hora del sistema? como podria hacer eso? la verdad seria la primera vez que lo hago y bueno, me gustaria aprender!
Título: Re:Juego en segundo plano
Publicado por: penumbra en Septiembre 20, 2014, 01:24:47 AM
date_current_datetime() es una función  de GMS que devuelve la fecha y la hora actual. Esta variable se usa en conjunto con otras funciones para leer un dato en específico (día, hora, mes, etc). Hay MUCHAS funciones de tiempo en GMS, te recomiendo que leas el manual, porque lo que quieres hacer se puede hacer usando distintas funciones.

Esto es sólo una idea. Cuando se cierre el juego, usas
[gml]fecha_de_guardado = date_current_datetime()[/gml]
y guardas la variable en el INI

Luego, al cargar el juego, lees desde el ini esa fecha
[gml]
     fecha_de_guardado = ini_read_real(blah, blah, blah)
     diferencia = date_hour_span(fecha_de_guardado, date_current_datetime());
[/gml]

No lo he probado, por ejemplo. La función  date_current_datetime() devuelve un número real, según el manual, por lo que para guardar su valor en un ini sedebe usar write_real y read_real para leerlo, pero no sé si la función date_hour_span() acepte correctamente ese valor real almacenado en fecha_de_guardado. Yo pienso que sí, y creo que esta es la manera más directa, pero si no se pudiera, la solución sería guardar individualmente (por separado) los días de las horas y calcular por separado la diferencia en días y al final dejar todo en horas

Pero bueno, como dije, consultando las funciones en el manual se puede hacer
http://docs.yoyogames.com/source/dadiospice/002_reference/date%20and%20time/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/date%20and%20time/index.html)

Por ejemplo, en lugar de date_current_datetime() que devuelve toda la fecha completa, se puede usar current_hiour(), current_day(), current_month(), etc
Título: Re:Juego en segundo plano
Publicado por: carry en Septiembre 20, 2014, 12:57:22 PM
Gracias penumbra. pero tengo otra pregunta. debe haber una solucion, por que si la gente adelante el año o la hora, haría crecer la mascota virtual rápidamente, me imagino que el GMS debe tener una función que trabaje con la fecha online o algo así, tu que me aconsejas?
Título: Re:Juego en segundo plano
Publicado por: king195 en Septiembre 20, 2014, 01:07:30 PM
Cita de: carry en Septiembre 20, 2014, 12:57:22 PM
Gracias penumbra. pero tengo otra pregunta. debe haber una solucion, por que si la gente adelante el año o la hora, haría crecer la mascota virtual rápidamente, me imagino que el GMS debe tener una función que trabaje con la fecha online o algo así, tu que me aconsejas?

Eso mismo hacia la gente con algunos juegos como Plantas vs Zombies(en el jardín Zen), si el exe es local y funciona  por un cliente es imposible que puedas hacer algo. Si quieres que no sucedan este tipo de cosas te toca hacer el juego "online", de tal forma que la fecha u hora vaya basada en una base de datos o en el servidor.
Título: Re:Juego en segundo plano
Publicado por: carry en Septiembre 21, 2014, 11:44:02 PM
Gracias amigo es buena tu idead. un servidor