Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: javiel en 09 de Agosto de 2004, 01:05:23 PM

Título: Velocidad Del Juego
Publicado por: javiel en 09 de Agosto de 2004, 01:05:23 PM
 Llevo haciendo un juego desde hace tiempo y estoy haciendo las pruebas en varios ordenadores para ver como va. El problema es que según el ordenador, y algunas veces el sistema operativo, me va mas rápido o mas lento. Utilizo las funciones para el control de velocidad que vienen en libsdl.org, estas de aqui:

http://sdldoc.csn.ul.ie/guidetimeexamples.php

Y no se pq me va mal, pq se supone que utilizando esto me debería de ir a la misma velocidad en todos lados ¿o no es así?.

Bueno, supongo que el juego me podría ir más lento, en un ordenador antiguo, pero nunca más rápido ¿no?

ustedes que utilizáis?? os ha pasado lo mismo???
Título: Velocidad Del Juego
Publicado por: Lessman en 09 de Agosto de 2004, 01:35:42 PM
...
Título: Velocidad Del Juego
Publicado por: gdl en 09 de Agosto de 2004, 01:45:36 PM
 Un pequeño detallito sobre lo que dijo Lessman en su código.

No esperes en un bucle a que pase el tiempo:

mientras(darMilisegundos() < tiempo); //No se hace nada, mientras no se haya completado el ciclo de tiempo.

Es mejor usar funciones de retardo (Delay() o Sleep() o como quiera que se llame). Si el argumento es en milisegundos, quedaría algo como:

excedente=tiempo-darMilisegundos();
si(excedente>0) Delay(excedente);


Esto permite al sistema desahogarse en el Delay() haciendo sus cosillas (búsquedas en disco, grabar cachés, mantenimiento interno, atender interrupciones, etc.) y luego no te interrumpe tanto durante la ejecución de tu programa. Resultado: más fluidez, no mucha más, pero algo es algo.
Título: Velocidad Del Juego
Publicado por: ethernet en 09 de Agosto de 2004, 02:29:57 PM
 te remito a google, a un articulo de javier arevalo, se llama fixed time loop. esta en la pagna de jare y en flipcode, seguro q te ayuda

un saludo
Título: Velocidad Del Juego
Publicado por: Pogacha en 09 de Agosto de 2004, 05:34:21 PM
 Bien, frenarse para tener una velocidad maxima es sencillo.
Pero lo que realmente se usa y es lo ideal es saber cuanto a demorado en hacerse el frame anterior
y de esta manera las velocidades y aceleraciones de los objetos del juego quedarán afectadas de esta variable. De todas maneras se puede poner un tope de velocidad por ahí no interesa que haga 200 frames por segundo.


Frame(float Tiempo_Frame)
{
Atender_Teclado();

pj->Mover(Velocidad.x * Tiempo_Frame, Velocidad.y * Tiempo_Frame);

Mover_Bichos(Tiempo_Frame); // la velocidad de cada bicho tambien es guiada.

Dibujar_Pantalla();
}


main ()
{
 Tiempo_Actual=Get_Tiempo();
 while(NoSalir)
 {
   if(NoPausa) Frame(Tiempo_Anterior - Tiempo_Actual);

   Tiempo_Anterior=Tiempo_Actual;
   Tiempo_Actual=Get_Tiempo();
 }
}