Pygame tidak mengizinkan saya menggunakan float untuk rect.move, tetapi saya membutuhkannya

Aug 18 2020

Saya baru saja diciptakan versi Lunar Lander (Anda tahu, permainan retro tua) di Python 3 dan Pygame: saya bergerak pendarat ( rect.move) setiap frame sepanjang sumbu y karena gravitasi \.

Masalah:
Sampai saya mencapai 1 m / s, nilai y yang ditambahkan ke rect.move adalah float di bawah 1: Saya harus int()membulatkannya, karena pygame tidak suka float.
Dalam versi sebelumnya dengan Tkinter, coord y dari pendarat adalah seperti ini:

0.01
0.02
...
0.765
1.03
1.45
...

Dalam pygame itu

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

Ini sangat mengganggu, karena gerakannya tidak lancar. Apakah seseorang tahu bagaimana mengatasi ini? Seperti, masukkan pelampung ke rect.move? Terima kasih sebelumnya!

Jawaban

4 Rabbid76 Aug 18 2020 at 19:29

Karena pygame.Rectseharusnya mewakili suatu area di layar, suatu pygame.Rectobjek hanya dapat menyimpan data integral:

Koordinat untuk objek Rect adalah bilangan bulat. [...]

Jika Anda ingin menyimpan posisi objek dengan akurasi floating point, Anda harus menyimpan lokasi objek dalam variabel terpisah masing-masing atribut dan melakukan sinkronisasi pygame.Rectobjek. roundkoordinat dan menetapkannya ke lokasi (misalnya .topleft) dari persegi panjang:

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

Saya belum mengujinya sendiri jadi saya minta maaf jika ini tidak berhasil tetapi saya pikir python mengambil nomor sebagai string jadi bukan int(variable)

Kamu seharusnya melakukan float(variable)