Pygame не позволяет мне использовать float для rect.move, но он мне нужен
Я недавно воссозданный версию 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
? Заранее спасибо!
Ответы
Поскольку pygame.Rectпредполагается, что представляет собой область на экране, pygame.Rect
объект может хранить только целые данные:
Все координаты объектов Rect - целые числа. [...]
Если вы хотите сохранить положение объекта с точностью до плавающей запятой, вы должны сохранить местоположение объекта в отдельных переменных или атрибутах и синхронизировать pygame.Rect
объект. roundкоординаты и назначьте их местоположению (например .topleft
) прямоугольника:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
Я сам не тестировал его, поэтому извините, если это не сработает, но я думаю, что python принимает число в виде строки, поэтому вместо int(variable)
Ты должен сделать float(variable)