2016-02-25 1 views
1

Je suis en train de faire un jeu en utilisant PyGame (Python 3), et je cherche un moyen de faire tourner le jeu à un FPS fixe.Définir un FPS fixe dans Pygame, Python 3

La majeure partie du jeu est située à l'intérieur d'une boucle while géante, où l'utilisateur entre, les sprites sont rendus, etc. Mon objectif est de pouvoir définir un FPS fixe qui fera tourner le jeu à la même vitesse sur un ordinateur rapide ou lent.

Je peux, bien sûr, utiliser le module d'horloge pygame:

clock = pygame.time.Clock() 

puis appeler cette chaque boucle:

clock.tick(30) 

mais qui gardera le jeu plafonnée à 30 FPS. Donc, si je le règle à 500 FPS, il pourrait encore tourner aussi vite qu'avant. Mon objectif est que si je le règle à 500 FPS, il fonctionnera à la même vitesse qu'à 500 FPS ...

Donc il est possible de faire tourner le jeu à un FPS fixe (ou de faire illusion que), indépendamment de la vitesse de l'ordinateur - ou au moins courir à la même vitesse grâce à l'utilisation d'un algorithme de saut de trame?

Désolé si cette formulation était plutôt confuse. L'horloge.tick renvoie l'heure depuis le dernier appel à clock.tick.

Répondre

4

Utilisez cette valeur et multipliez toutes vos vitesses lorsque vous vous déplacez. Exemple

dt = clock.tick(60) 
player.position.x += player.xSpeed * dt 
player.position.y += player.ySpeed * dt 

De cette façon, votre joueur se déplace toujours à la même vitesse indépendamment de ce que vous mettez dans la fonction clock.tick(). Important à retenir est d'appeler uniquement clock.tick() une fois par image.

+0

ce n'est pas exactement ce que je veux. Je veux que le jeu tourne à la même vitesse, quelle que soit la vitesse de l'ordinateur, et toujours courir au FPS que je spécifie (ou au moins donner une illusion de cela). –

+0

C'est exactement ce que ma solution fait. C'est comme ça que tous les jeux le font. Vous utilisez le temps delta et le multipliez avec toutes vos vitesses, de cette façon vos personnages dans le jeu se déplaceront toujours à la même vitesse quelle que soit la vitesse de votre ordinateur. – Fredrik

+0

Et avec cette solution, vous pouvez mettre n'importe quel fps dans 'clock.tick()' le jeu tournera toujours à la bonne vitesse. – Fredrik