Pygame não me deixa usar float para rect.move, mas eu preciso
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
Como pygame.Rectdeve representar uma área na tela, um pygame.Rect
objeto 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.Rect
objeto. roundas coordenadas e atribuí-lo à localização (por exemplo .topleft
) do retângulo:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
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)