Raydium 3D Game Engine
http://memak.raydium.org/

Un moyen pour connaitre l'heure précise
http://memak.raydium.org/viewtopic.php?f=8&t=441
Page 1 of 1

Author:  k_i_c_k [ Sun Jun 11, 2006 5:28 pm ]
Post subject:  Un moyen pour connaitre l'heure précise

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

Author:  Xfennec [ Sun Jun 11, 2006 5:57 pm ]
Post subject: 

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 ?

Author:  k_i_c_k [ Mon Jun 12, 2006 12:24 pm ]
Post subject: 

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.

Author:  Xfennec [ Mon Jun 12, 2006 5:01 pm ]
Post subject: 

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.

Author:  k_i_c_k [ Mon Jun 12, 2006 6:14 pm ]
Post subject: 

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.

Author:  Xfennec [ Mon Jun 12, 2006 7:41 pm ]
Post subject: 

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.

Author:  k_i_c_k [ Tue Jun 13, 2006 4:55 pm ]
Post subject: 

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?

Author:  Xfennec [ Wed Jun 14, 2006 11:17 am ]
Post subject: 

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 :)

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/