Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Velocidad Del Juego

Iniciado por javiel, 09 de Agosto de 2004, 01:05:23 PM

« anterior - próximo »

javiel

 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???
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

Lessman


gdl

 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.

ethernet

 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

Pogacha

 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();
 }
}






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.