Je lu les news et le cours de C quand j'ai du temps juste pour la logique, j'ai pas pu tester mais je doute sur ce code :
tempsActuel = SDL_GetTicks(); if(tempsActuel - tempsPrecedent > 30) {
positionZozor.x++;
tempsPrecedent = tempsActuel; } else/* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */ {
SDL_Delay(30 - (tempsActuel - tempsPrecedent)); }
Voici le code C du cour de Matéo pour faire patienter le processeur de 30 ms.
En francais ca fait : SI ca fait déjà 30 ms depuis le dernier déplacement de zozor, ALORS on déplace zozor SINON on attend [le temps qui reste pour faire 30 ms]. Mais à ce moment là ca feras plus que 30 ms vu que le procésseur de redonnera pas la main au programme avant 30 ms + le temps que l'OS repasse par le programme (temps variable).
Ducoup, le déplacement ne pouras pas être fluide et le temps sera plus près de 40 ms que de 30 ms vu qu'il faut rajouter environ 10 ms ~ .
Salut
J'ai eu la meme reflexion que toi en lisant ce bout de code .
Effectivement si on considere que le programme met 10ms a executé les insctuction, quand il arrive a la condition il ira au else,puis patientera 20ms et refera les insctructions , ce qui durera 10ms de plus.
Je pense qu il faut rajouter un
positionZozor.x++;
tempsPrecedent = tempsActuel;
dans le else apres le delai d'attente et la ca marchera normalement.
C'est plus ou moins vrai en effet. Chez moi ça met à peine plus de 30ms (faut pas tjs 10ms). Chuis pas à 3-4ms près
Ouais mais si les insctructions avant le test mettent environ 20ms , tu passe tout de suite a 50ms au lieu de 30ms , la y a un probleme pour la fluidité non?
les temps des "insctructions avant" est négligable à coté du temps que l'OS met à redonner la main au programme.
Enfait, avant ce nouveau chapitre, j'avais éssayé de faire bouger zozor et j'ai dû faire des boucle infini vides avec un compteur et j'ai pu voir que le nombre d'instruction à la secondes est vraiment... GEANT !!
10 ms c'est pas rien par rapport au temps que met le procésseur à éxecuter une instruction du genre tempsPrecedent = tempsActuel; ou un test.
A mon avi, pour la fluidité il faut passer 20 ms (avec SDL_Delay) et rester attentif sur les 10 dernières ms avec une boucle et SDL_GetTicks().
A voir... et tester...
Un doute sur la gestion du temps du cour de mateo
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)