Pygame ne me laisse pas utiliser float pour rect.move, mais j'en ai besoin
J'ai récemment recréé une version de Lunar Lander (vous savez, le vieux jeu rétro) en Python 3 et Pygame: mes coups de lander ( rect.move
) chaque trame le long de l'axe y fait de la gravité \.
Problème:
jusqu'à ce que j'atteigne 1 m / s, la valeur y ajoutée à rect.move est un flotteur inférieur à 1: je dois l'utiliser int()
pour l'arrondir, car pygame n'aime pas les flotteurs.
Dans une version précédente avec Tkinter, la coordonnée y de l'atterrisseur était comme ceci:
0.01
0.02
...
0.765
1.03
1.45
...
Dans pygame c'est
0
0
0
...
1
1
1
2
2
...
C'est vraiment ennuyeux, car le mouvement n'est pas fluide. Quelqu'un sait-il comment résoudre ce problème? Comme, entrez un flottant dans rect.move
? Merci d'avance!
Réponses
Puisqu'il pygame.Rectest censé représenter une zone à l'écran, un pygame.Rect
objet ne peut stocker que des données intégrales:
Les coordonnées des objets Rect sont toutes des entiers. [...]
Si vous souhaitez stocker les positions des objets avec une précision en virgule flottante, vous devez stocker l'emplacement de l'objet dans des variables séparées respectivement des attributs et synchroniser l' pygame.Rect
objet. roundles coordonnées et attribuez-le à l'emplacement (par exemple .topleft
) du rectangle:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
Je ne l'ai pas testé moi-même, donc je suis désolé si cela ne fonctionne pas mais je pense que python prend le nombre comme une chaîne donc au lieu de int(variable)
Tu devrais faire float(variable)