Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: retro-bruno le Novembre 12, 2014, 08:31:07 am

Titre: FPS à double vitesse
Posté par: retro-bruno le Novembre 12, 2014, 08:31:07 am
Bonjour,

Je rencontre un problème que je n'arrive pas à m'expliquer.

A l'aide d'une View de 320x240, d'une texture de décors en 1280x960, je balade un sprite de 16x16 dans le décors.

Le problème qui m'arrive c'est qu'aléatoirement, mon jeu tourne à deux vitesse, normale ou trop rapide. Les changements sont instantanés, mais rares. Ils peuvent se produire, par exemple, au bout d'une minute comme au bout de 20 secondes.

Voici comment je gère la vitesse. Toute d'abord, au début de mon code, il y a ça :
    horloge = sfClock_create();
    sfRenderWindow_setFramerateLimit(win,60);
    sfRenderWindow_setVerticalSyncEnabled(win,sfFalse);

L'horloge tourne en permanence sans jamais être remise à 0, je m'en sert de repère temporel en millisecondes.

Ensuite, pour fixer la vitesse de mon programme à environs la vitesse d'affichage, il y a, en algorithme, ça :
1) Je récupère l'horloge au début dans la boucle dans la variable "temps"
2) A la fin de la boucle, je crée une petite boucle de temporisation :
Citer
Tant que horloge - temps < 16, boucler à vide
Fin Tant que

Je me demandais si cette boucle était nécessaire, du coup ?

EDIT: Sans la boucle, cela semble fonctionne... C'est normal ?
Titre: Re : FPS à double vitesse
Posté par: Laurent le Novembre 12, 2014, 12:41:28 pm
Ne fais jamais ça. Au pire un sfSleep pour faire une attente qui ne monopolise pas le CPU. Mais là comme tu as activé une limite de framerate, tu n'as pas besoin de faire quoique ce soit, c'est SFML qui fera la temporisation pour toi.
Titre: Re : FPS à double vitesse
Posté par: retro-bruno le Novembre 12, 2014, 01:13:13 pm
Merci beaucoup pour ton aide précieuse.  :)
Titre: Re : FPS à double vitesse
Posté par: retro-bruno le Novembre 18, 2014, 11:32:33 pm
Bonsoir, je déterre ce topic car j'ai un problème similaire mais seulement sous windows.

En fait, je fixe les framerates à 60 avec les commandes suivantes, rien d'autre pour ralentir :
Citer
sfRenderWindow_setFramerateLimit(win,60);
sfRenderWindow_setVerticalSyncEnabled(win,sfTrue);

Sous Ubuntu dans mon chromebook, pas de problèmes, ça tourne même très vite.
Mais sous windows 8.1, avec un processeur i7, et une carte graphique amd desktop, c'est parfois plus lent, parfois rapide. La vitesse change en cours de route et instantanément.
Est ce que cela peut venir de ma carte graphique ? (mon driver est à jour)
Ou existe t'il un problème connu à ce niveau là ?
Titre: Re : FPS à double vitesse
Posté par: G. le Novembre 18, 2014, 11:35:34 pm
N'active pas la vsync en même temps qu'une limite de FPS. C'est soit l'un soit l'autre mais pas les 2.
Titre: Re : FPS à double vitesse
Posté par: retro-bruno le Novembre 18, 2014, 11:54:50 pm
Merci, en supprimant la vsync et en fixant la framerate à 50, c'est mieux.
Mais c'est toujours un peu plus lent sous windows, je ne comprend pas pourquoi.

De plus, de temps en temps (rarement heureusement), durant 2 secondes, la vitesse accélère d'un coup, puis elle revient à la normale.

EDIT: J'ai eu l'occasion de tester mon jeu sur Mac/Windows 7/Bootcamp, et il tourne aussi vite et bien que sur mon chromebook Ubuntu. Conclusion : C'est ma carte graphique qui n'est pas terrible.