Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Thu Mar 28, 2024 5:00 pm

All times are UTC




Post new topic Reply to topic  [ 8 posts ] 
Author Message
PostPosted: Sun Jun 11, 2006 5:28 pm 
Voila j'ai besoin de savoir comment connaitre le temps exacte. En gros je veux que sur 2 machines différentes, le programme tourne à la même vitesse.

J'ai trouvé une fonction dans l'api mais visiblement ca ne fait pas ce que je veux.

Quelle est la méthode la plus simple pour avoir le temps qui s'écoule(entre 2 frame ou le temps absolu depuis le debut du programme) avec une très grande précision.

merci par avance


Top
  
 
 Post subject:
PostPosted: Sun Jun 11, 2006 5:57 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Oulà, tu es en train de ré-inventer la roue là, non ? Raydium fait tout pour que tu n'es pas à te soucier de ce genre de choses. Les timecalls (et la variable raydium_frame_time au pire) sont là pour t'aider si tu souhaite mettre en place tes propres fonctions basées sur le temps. Tu peux en dire plus sur ton besoin ?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 12, 2006 12:24 pm 
En gros, j'ai fais un truc pas trop bien je pense maintenant, j'ai appelé une fonction avec une fréquence de 100Hz.

raydium_timecall_add(AddTime,100);

dans cette fonction j'incrémente une variable time qui me sert à savoir le temps depuis le debut du programme et je calcul de combien de temps on a avancé depuis la dernière frame. Ensuite dans chaque phase de mouvement je multiplie par step afin d'avoir quelque chose de proportionnelle sur chaque machine.

void AddTime(void)
{
LastTime = Time;
Time += 0.01;
Step = Time - LastTime;
}

je pense que ce n'est pas la meilleur facon d'y faire, mais j'ai un peu toujours fait comme ca, ca me semble simple mais il s'avère que ca ne marche pas sur toute les machines.

dit moi si il y a un autre moyen plus simple.


Top
  
 
 Post subject:
PostPosted: Mon Jun 12, 2006 5:01 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
C'est pas mal, sauf que "Step" existe déjà, sous le nom raydium_frame_time. C'est un flottant qui indique la durée de la dernière frame en secondes. La variable est protégée contre les modulos, et est gérée par un timecall "élastique" ce qui fait que tu es certain d'avoir une valeur cohérente quel que soit le framerate. Il y a des exemples d'utilisation (au cas ou) dans ManiaDrive, KingHill2 et plein d'autres.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 12, 2006 6:14 pm 
par contre du coup comment cela ce fait-il que ca ne tourne pas à la même vitesse sur différente machines?

j'ai testé sur 2 machines et c'est vraiment flagrant, alors soit j'ai oublié d'inclure le step quelque part, soit le problème est plus grave.


Top
  
 
 Post subject:
PostPosted: Mon Jun 12, 2006 7:41 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Tu parles de ta méthode avec le timecall 100 Hz ? Si oui, il faut voir les écarts constatés et les machines en question, mais lors de mes tests sur cette partie de l'API lors de sa rédaction, j'avais un écart initial (dû au chargement de l'appli et des données) qui pouvait aller jusqu'a plusieurs secondes, mais sans divergence notable ensuite (le décallage restait le même). Si tu arrives à faire une appli minimaliste qui montre ce problème, je vais pouvoir jeter un oeil.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 13, 2006 4:55 pm 
Après réflexion, il se trouve qu'il y avait un problème dans mon programme.

dans l'exemple ci-dessus raydium_frame_time n'est pas egale à Step, car step est mis a jour dans la fonction addtime qui va à 100Hz, par contre raydium_frame_time est mis à jour à chaque frame. Du coup si je bouge mes objet en rapport à step à chaque frame, et que la fréquence varie d'une machine à l'autre, les objets ne bougeront pas aussi vite sur une machine ou sur l'autre. Je pense donc utilisé raydium_frame_time qui sera bien plus adapté pour mes choix.

Une autre question comme ca en passant, il existe une fonction dans les osd qui permet d'afficher une texture sur une partie de l'ecran, existe-t-il une fonction permettant d'afficher une partie de texture sur une partie d'ecran?


Top
  
 
 Post subject:
PostPosted: Wed Jun 14, 2006 11:17 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Oui, cherche du coté des raydium_osd_mask* et raydium_osd_draw*. Je n'ai pas le temps de regarder pour l'instant, mais je ne suis pas certain qu'il existe une version qui permette à la fois de prendre seulement un morceau de texture et à la fois de la mettre à un endroit précis de l'écran. Si elle manque, eh bien on la rajoutera :)


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

All times are UTC


Who is online

Users browsing this forum: No registered users and 15 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