Pygame не позволяет мне использовать float для rect.move, но он мне нужен

Aug 18 2020

Я недавно воссозданный версию Lunar Lander (вы знаете, старый ретро игры) в Python 3 и Pygame: мои Lander ходы ( rect.move) каждый кадр вдоль оси у из - за гравитации \.

Проблема:
пока я не достиг 1 м / с, значение y, добавленное к rect.move, будет числом с плавающей запятой меньше 1: я должен использовать его int()для округления, поскольку pygame не любит поплавки.
В предыдущей версии с Tkinter координата Y посадочного модуля была такой:

0.01
0.02
...
0.765
1.03
1.45
...

В pygame это

0
0
0
...
1
1
1
2
2
...

Это действительно раздражает, так как движение не плавное. Кто-нибудь знает, как это решить? Например, ввести число с плавающей запятой rect.move? Заранее спасибо!

Ответы

4 Rabbid76 Aug 18 2020 at 19:29

Поскольку pygame.Rectпредполагается, что представляет собой область на экране, pygame.Rectобъект может хранить только целые данные:

Все координаты объектов Rect - целые числа. [...]

Если вы хотите сохранить положение объекта с точностью до плавающей запятой, вы должны сохранить местоположение объекта в отдельных переменных или атрибутах и ​​синхронизировать pygame.Rectобъект. roundкоординаты и назначьте их местоположению (например .topleft) прямоугольника:

x, y = # floating point coordinates
rect.topleft = round(x), round(y)
Dragonwarrior Aug 18 2020 at 19:29

Я сам не тестировал его, поэтому извините, если это не сработает, но я думаю, что python принимает число в виде строки, поэтому вместо int(variable)

Ты должен сделать float(variable)