Pygame tidak mengizinkan saya menggunakan float untuk rect.move, tetapi saya membutuhkannya
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
Karena pygame.Rectseharusnya mewakili suatu area di layar, suatu pygame.Rect
objek 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.Rect
objek. roundkoordinat dan menetapkannya ke lokasi (misalnya .topleft
) dari persegi panjang:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
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)