Pygame não me deixa usar float para rect.move, mas eu preciso

Aug 18 2020

Eu recriado recentemente uma versão do Lunar Lander (você sabe, o jogo retro de idade) em Python 3 e Pygame: meus movimentos lander ( rect.move) cada quadro ao longo do eixo y por causa da gravidade \.

Problema:
Até atingir 1 m / s, o valor y adicionado a rect.move é um float abaixo de 1: devo usar int()para arredondar para cima, pois o pygame não gosta de floats.
Em uma versão anterior com o Tkinter, a coordenada y do módulo de pouso era assim:

0.01
0.02
...
0.765
1.03
1.45
...

No pygame é

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

Isso é realmente irritante, pois o movimento não é fluido. Alguém sabe como resolver isso? Tipo, inserir um float para rect.move? Desde já, obrigado!

Respostas

4 Rabbid76 Aug 18 2020 at 19:29

Como pygame.Rectdeve representar uma área na tela, um pygame.Rectobjeto só pode armazenar dados integrais:

As coordenadas para objetos Rect são todos inteiros. [...]

Se você quiser armazenar posições de objeto com precisão de ponto flutuante, você deve armazenar a localização do objeto em variáveis ​​separadas, respectivamente atributos e para sincronizar o pygame.Rectobjeto. roundas coordenadas e atribuí-lo à localização (por exemplo .topleft) do retângulo:

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

Eu não testei sozinho, então lamento se isso não funcionar, mas acho que python está considerando o número como uma string, então, em vez int(variable)

Você deveria fazer float(variable)