27Fermer29
GoldenCrystalLe 17/04/2010 à 12:38
./25 > Le truc c'est qu'un timer n'aura jamais une précision suffisamment bonne pour te permettre d'obtenir un rendu fluide.
Pour avoir un truc fluide, il y a d'autres méthodes, plus simples qu'un timer.
En fait, il suffit de compter le temps dans ta boucle principale. Avec un API précis bien sûr… Il te faut au moins une précision de l'ordre de 10ms, mais si tu peux avoir 1ms c'est encore mieux ^^int lastTime = …; // Obtenir le temps de référence (je suppose qu'on compte en millisecondes dans cet exemple) int newTime; int desiredInterval = 1000 / 60; // Si tu vises 60 FPS while (loop) { do { usleep(1); // Sleep(1) sous Windows… Tu as peut-être même un équivalent portable SDL ? … // Gestion des évènements newTime = …; // Obtenir le temps actuel } while (newTime - lastTime < desiredInterval); // On répète la boucle d'évènements tant qu'on a pas attendu assez newTime += desiredInterval; // On incrémente le temps de référence de la durée d'une frame fixe. … // Rendu }Par contre cet algo ne gère pas le frameskip. C'est pas forcément dur à ajouter, mais tu n'en auras pas besoin au début.
./27 > Et tu as raison !
Un truc qui bloque toutes les autres opérations sur le système même quand il fout rien, c'est ultra chiant…