Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Thu Mar 28, 2024 9:53 am

All times are UTC




Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Tue Aug 12, 2003 1:37 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Le moteur de temps est.. terminé, ou du moins propose le minimum syndical pour gérer les problemes liés au temps dans les jeux.
Il se compose d'une seule fonction publique complétement simple:

void raydium_timecall_add(void *funct, GLint hz)

Le premier parametre (funct) représente la fonction que vous souhaitez inscrire, et hz la fréquence des appels.

Par exemple:
Code:
int cpt=0;

void toto(void) { cpt++; }

[...]

raydium_timecall_add(toto,900);

cpt est incrémenté "automatiquement" de 900 toutes les secondes (quel que soit la vitesse d'affichage du jeu et le nombre de passages dans la boucle d'affichage)

Il est aussi possible d'inscrire des fonctions avec des appels "élastiques", pour gérer une situation à chaque frame:
Code:
float cpt=0;

void toto(float step) { cpt+=step; }

[...]

raydium_timecall_add(toto,-60);

Vous voyez qu'ici le second argument est négatif, pour désigner un "softcall" (appel élastique, donc), et voici comment il faut lire ca:
"la fréquence normale d'appel de toto est de 60 Hz"
Mais cette fonction est appelée à chaque frame, sans conditions (c'est à dire 120 fois par seconde si le jeu tourne à 120 fps), mais avec un nouveau parametre (de type float donc) qui indique l'avance ou le retard sur la fréquence normale !
Par exemple, dans notre cas (toto est demandé à 60 Hz, et le jeu tourne à 120 fps), step est égal à 0.5 (on appelle 2 fois trop la fonction).
Cela permet d'avoir un mouvement fluide de qq chose à chaque frame même si la fréquence d'appel est faible, et d'avoir tout simplement une base de temps dans le programme.

Je ne sais pas si c'est bien clair, alors n'hésitez pas à poser des questions si cela vous intéresse.
Les sources sont à jour sur WVS.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jan 16, 2004 9:20 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Certains avaient remarqués que le jeu semblait aller plus vite sous Windows que sous Linux.. eh bien en effet, le temps se déroulais plus vite sous Windows, à cause de la faible résolution du timer utilisé (100 Hz en gros). J'ai modifié le truc et les timecalls utilisent maintenant le PerformanceCounter sous Windows qui permet des choses bcp plus stables.
Il reste un problème: les timecalls non élastiques ne sont pas précis du tout en fait.. à creuser, ainsi que les coupures à certaines heures (modulo qq part) qui se produisent aussi sous windows maintenant.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 49 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group