Noticias

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

* Sponsor

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: Como crear un delta time general? (RESUELTO)  (Leído 502 veces)

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

Desconectado Alemar5

en: Abril 03, 2021, 03:54:12 am
Hola amigos :D

Hace tiempo una persona probó uno de mis juegos y le iba super acelerado, por lo que me dedique a investigar y me tope con un video de guinxu donde explicaba que es el delta time, vi algunos videos de como implementarlo pero era un código que se implementa uno por uno, mi pregunta es si existe alguna forma de implementar el deltatime en un solo script y que todo el tiempo del juego se base en el mismo?
Es que el problema es que tengo un proyecto muy avanzado y tendría que rediseñar por completo todo para implementar el deltatime.

De antemano gracias por la ayuda :,3
« Última modificación: Abril 08, 2021, 04:46:57 pm por Alemar5 »

 


No Tienes Permisos Para Dar Puntos
point 10 Puntos

Usuarios que puntuaron el tema » Clamud (10 Pts) 


Desconectado OrleikertSoft

  • Visitante
  • *
  • Puntos: 5
  • Mensajes: 3
  • Sexo: Masculino
  • Me gusta mucho hacer juegos :D
    • Ver Perfil
    • Orleikert Soft
Respuesta #1 en: Abril 03, 2021, 03:57:14 am
me pasa lo mismo

Orleikert B.
 


Desconectado T789

Respuesta #2 en: Abril 03, 2021, 04:07:51 am
¿Que tan veloz va tu juego? ¿En vez de un delta time no seria mejor cambiar el room_speed?

 
Los siguientes usuarios dieron las gracias a este tema: Alemar5


Desconectado Alemar5

Respuesta #3 en: Abril 03, 2021, 04:17:22 am
El tiempo de las tomo de mi juego son de 30fps (eso creo), pero el problema de solo cambiar el tiempo de las toons es que el juego puede ir muy acelerado en una PC potente o muy lento en una computadora de gama baja, por lo que sería muy inconcistente, lo que hace el delta time es compensar esos tiempos en los distintos dispositivos, pero quiero buscar una forma general de aplicarlo al juego.

 


Desconectado Void

Respuesta #4 en: Abril 04, 2021, 02:32:12 am
No existe manera de implementar delta timing en un proyecto avanzado sin tener que adaptar el código del proyecto.

Aparte de computadoras sin la potencia para correr el juego a su velocidad normal, no es normal que un juego vaya más rápido o más lento en unas u otras máquinas. Sé que hace algún tiempo hubo un bug en que si el juego se mostraba en algunos monitores con frecuencia de actualización superior aceleraba la lógica del juego, pero el bug ya había sido arreglado, considera enviar un reporte de bug a Yoyogames, mientras más detalles puedas dar mejor, versión de GMS, modelo de computadora, tarjeta de video y monitor, probablemente te vayan a pedir también una copia de tu proyecto para probar.

 


Desconectado Alemar5

Respuesta #5 en: Abril 04, 2021, 04:58:38 am
Gracias por la respuesta :,3

 


Desconectado 0m@R

Respuesta #6 en: Abril 05, 2021, 11:04:23 pm
No importa lo que te digan sobre la room_speed en este aspecto, esa variable se cambia es de acuerdo al tipo de juego y el peso de sus lógicas, como usuario de GMS por años nunca he usado una diferente a 30 y me va bien en todos los proyectos.

Un juego con toque profesional, que quiera perdurar por la posteridad, moviéndose bien en las futuras máquinas más potentes y también en las lentas máquinas de antaño, tiene que tener un trabajo con el delta de tiempo en sus lógicas; y el cambio en tu código no es mucho, mira:

Crea una vez la variable global para guardar el delta de tiempo (le llamé dt):
globalvar dt;
dt = 0;

En un objeto maestro (principal, único, perdurable, etc) pon el evento Begin Step con esto:
dt = min(0.1, delta_time * 0.000001);

El 0.000001 es para que el resultado nos quede en segundos, así poder implementar todo más intuitivamente.
El 0.1 es porque cuando por ejemplo, arrastras la ventana del juego, este se congela y acumula más delta, entonces este numerito es como un freno para impedir un delta mayor a 0.1 segundos.

Y listo, ese dt lo usas en todo el resto del código, usualmente se pone en dos lugares, para moverse:
var vel = velocidad * dt;
x += lengthdir_x(vel, direction);
y += lengthdir_y(vel, direction);

Para mover contadores o temporizadores, pd: hace mucho no uso los alarm[0], más que para disparar un evento inicial o que no importe la precisión; en vez de eso has esto:

evento Create:
reloj = 0;

evento Step:
reloj -= dt;
if reloj <= 0 {
    reloj += 5;
    // hacer cosas
}

El teporizador se disparará cada 5 segundos, y hará algo, notar que lo inicializamos en 0 así que disparará empezando; también se puede hacer que cuando uno lo ponga en -1 quede desactivado, imitando el funcionamiento de las alarm[0]; así:

if reloj != -1 {
    reloj -= dt;
    if reloj <= 0 {
        reloj = -1;
        // hacer cosas
    }
}

Se detendría el temporizador inmediatamente dispare, note que puede cambiar esto como quiera, hacer conteo ascendente, apagar el temporizador, ponerlo en otro valor para que reinicie, etc; su imaginación y capacidad de programación es el límite.

Dejo otro tip, por ejemplo cuando un temporizador se usa como indicativo de algo, digamos que un ente tiene un poder especial que se activa por un tiempo, entonces podemos solo hacer esto:

reloj = max(0, reloj - dt);

Así siempre estará disminuyendo hasta quedar en 0, luego solo es preguntar si reloj == 0 para ver el estado, usar esto con precaución en juegos de mucha lógica o muchos objetos, pues se está reescribiendo la variable siempre.
« Última modificación: Abril 05, 2021, 11:07:35 pm por 0m@R »

 
Los siguientes usuarios dieron las gracias a este tema: Clamud, Alemar5


Desconectado Alemar5

Respuesta #7 en: Abril 08, 2021, 04:46:15 pm
muchas gracias por la ayuda amigo, me funciono :3