Pygame non mi permette di usare float per rect.move, ma ne ho bisogno

Aug 18 2020

Recentemente ho ricreato una versione di Lunar Lander (si sa, il vecchio gioco retrò) in Python 3 e Pygame: le mie mosse Lander ( rect.move) su ogni frame lungo l'asse y a causa della gravità \.

Problema:
fino a quando non raggiungo 1 m / s, il valore y aggiunto a rect.move è un float inferiore a 1: devo usarlo int()per arrotondarlo, poiché a pygame non piacciono i float.
In una versione precedente con Tkinter, il coord y del lander era così:

0.01
0.02
...
0.765
1.03
1.45
...

In pygame è

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

Questo è davvero fastidioso, poiché il movimento non è fluido. Qualcuno sa come risolverlo? Ad esempio, inserisci un float in rect.move? Grazie in anticipo!

Risposte

4 Rabbid76 Aug 18 2020 at 19:29

Poiché pygame.Rectsi suppone che rappresenti un'area sullo schermo, un pygame.Rectoggetto può memorizzare solo dati integrali:

Le coordinate per gli oggetti Rect sono tutti numeri interi. [...]

Se si desidera memorizzare le posizioni degli oggetti con precisione in virgola mobile, è necessario memorizzare la posizione dell'oggetto in variabili separate rispettivamente attributi e sincronizzare l' pygame.Rectoggetto. roundle coordinate e assegnarlo alla posizione (es. .topleft) del rettangolo:

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

Non l'ho testato da solo quindi mi dispiace se non funziona ma penso che Python stia prendendo il numero come una stringa quindi invece int(variable)

Dovresti fare float(variable)