Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: CrashKen en Julio 28, 2014, 04:43:01 AM

Título: Movimiento Fijo y Fps variables
Publicado por: CrashKen en Julio 28, 2014, 04:43:01 AM
Los juegos hoy en dia no se limitan a un numero fijo de fps (fotogramas por segundo) sino que es mas alto cuanto mejor sea tu equipo. Me preguntaba si se podria lograr algo asi en Game Maker
Mi idea es dejar los fps de alguna room en un numero exageradamente alto como 9999, el problema es que a mayor fps mayor velocidad tiene el juego en si. hay alguna manera (optima) de limitar la velocidad de movimiento dependiendo de los fps que se tengan?
Saludos.
Título: Re:Movimiento Fijo y Fps variables
Publicado por: Iros en Julio 28, 2014, 04:56:21 AM
Los FPS se limitan en la frecuencia de tu placa que por lo general está indicada como "Frecuencia de actualización", por lo general son 60Hz y ese sería el límite de los FPS que podes usar en GM. Aumentarlo no va a hacer absolutamente nada ya que si es un número mayor que 60 lo bajaría automáticamente a 60 por ser el límite de tu tarjeta gráfica.
Título: Re:Movimiento Fijo y Fps variables
Publicado por: CrashKen en Julio 28, 2014, 05:54:18 AM
Cita de: Iros en Julio 28, 2014, 04:56:21 AM
Los FPS se limitan en la frecuencia de tu placa que por lo general está indicada como "Frecuencia de actualización", por lo general son 60Hz y ese sería el límite de los FPS que podes usar en GM. Aumentarlo no va a hacer absolutamente nada ya que si es un número mayor que 60 lo bajaría automáticamente a 60 por ser el límite de tu tarjeta gráfica.

quiza no entendiste muy bien, no voy a entrar en discusión de cuantos fps puedan ser apreciables con un monitor o con placa de video.
por ejemplo poniendo la room speed en 9999 tengo un juego en game maker que va a 1850 fps sin nada en pantalla. al agregar un objeto que constantemente en cada steep lanza particulas ellipse medianas los fps oscilan entre 850 y 910.
es decir que los fps varian dependiendo de la cantidad de informacion que se procese y etc,etc. El problema es que ademas de variar los fps tambien varia la velocidad de los steps y por lo tanto de todo el juego en si. podria hacer un calculo obteniendo la cantidad de fps actuales para saber cuantos pixeles tengo que mover a mi personaje, pero el problema es que la variable fps no se actualiza en cada instante sino que cada 1 segundo, lo que causa desincronizacion. ¿me explico?
Suerte.
Título: Re:Movimiento Fijo y Fps variables
Publicado por: CrashKen en Julio 28, 2014, 06:25:47 AM
Perdon por el doble post pero les muestro mi progreso.
con esto al parecer funciona muy bien! recien me entero que existe una variable llamada fps_real que me soluciono el problema xD
entonces cree este script:

var Devolver=(argument0*60)/fps_real;
return (Devolver);


y cada vez que tengo que hacer un movimiento lo hago asi:
x-=R_M(5);

con esto no importa si tengo 20 fps o 1000, el personaje se va a mover exactamente a la misma velocidad con la que se moveria 5 pixeles en 60 fps.

Usuarios expertos diganme ¿hay algun metodo mejor? ¿mi nivel de desconocimiento es un pecado? xD realmente no se si existe una mejor forma.

Saludos.
Título: Re:Movimiento Fijo y Fps variables
Publicado por: Clamud en Julio 28, 2014, 04:43:30 PM
Hola, el manual de GMS dice que se puede usar la variable "delta_time" para calcular el tipo de cosas que quieres hacer.
La verdad es que hacer un juego que pueda variar la cantidad de fps a cualquier valor y que a la vez se mantenga la jugabilidad es algo muy difícil de hacer, además de hacer cálculos para la velocidad de los objetos también es necesario recalcular la velocidad de las animaciones, las aceleraciones (como en un juego de plataformas), etc.
Y hacer que un juego tenga una tasa de fps mayor a 60 no tiene mucho sentido, tal vez sería mejor tomar acciones para cuando no se pueda alcanzar ése valor de fps, sobretodo en juegos que ocupan muchos recursos gráficos, lo más fácil de hacer es un sistema de "salto de fotogramas". En ese sistema, si delta_time ha rebasado el tiempo de un step normal, se desactivan los eventos Draw de todos los objetos (también se deben desactivar los background), en el siguiente step ya se dibuja normalmente.
Hace tiempo leí en el foro de YYG que existe una función que hace algo similar a la función obsoleta "set_automatic_draw", y que alguien la usaba para hacer "saltos de fotogramas", pero no recuerdo cómo se llama XD, ...si sabes inglés busca en ese foro.
Espero que te sirva la información.
Título: Re:Movimiento Fijo y Fps variables [Solucionado]
Publicado por: CrashKen en Julio 28, 2014, 10:19:02 PM
Cita de: Clamud en Julio 28, 2014, 04:43:30 PM
Hola, el manual de GMS dice que se puede usar la variable "delta_time" para calcular el tipo de cosas que quieres hacer.
La verdad es que hacer un juego que pueda variar la cantidad de fps a cualquier valor y que a la vez se mantenga la jugabilidad es algo muy difícil de hacer, además de hacer cálculos para la velocidad de los objetos también es necesario recalcular la velocidad de las animaciones, las aceleraciones (como en un juego de plataformas), etc.
Y hacer que un juego tenga una tasa de fps mayor a 60 no tiene mucho sentido, tal vez sería mejor tomar acciones para cuando no se pueda alcanzar ése valor de fps, sobretodo en juegos que ocupan muchos recursos gráficos, lo más fácil de hacer es un sistema de "salto de fotogramas". En ese sistema, si delta_time ha rebasado el tiempo de un step normal, se desactivan los eventos Draw de todos los objetos (también se deben desactivar los background), en el siguiente step ya se dibuja normalmente.
Hace tiempo leí en el foro de YYG que existe una función que hace algo similar a la función obsoleta "set_automatic_draw", y que alguien la usaba para hacer "saltos de fotogramas", pero no recuerdo cómo se llama XD, ...si sabes inglés busca en ese foro.
Espero que te sirva la información.

Muchas gracias, delta time era justo lo que buscaba. igual me estoy complicado demasiado con la gravedad (es un juego de plataformas) así que decidí mejor dejarlo en 60 xD