Pygame, rect.move için float kullanmama izin vermiyor, ama buna ihtiyacım var

Aug 18 2020

Geçenlerde bir sürümünü yeniden ettik Lunar Lander Python 3 ve pygame içinde (eğer eski bir retro oyun biliyorum): my Lander hamle ( rect.move) yerçekiminden dolayı y ekseni boyunca her çerçeve \.

Problem:
1 m / s'ye ulaşana kadar, rect.move'ye eklenen y değeri 1'in altında bir kayan nokta: int()pygame float'lardan hoşlanmadığı için onu yuvarlamak için kullanmalıyım .
Tkinter ile önceki bir versiyonda, iniş aracının y koordinatı şöyleydi:

0.01
0.02
...
0.765
1.03
1.45
...

Pygame'de

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

Hareket akıcı olmadığı için bu gerçekten can sıkıcı. Birisi bunu nasıl çözeceğini biliyor mu? Gibi, bir şamandıra girin rect.move? Şimdiden teşekkürler!

Yanıtlar

4 Rabbid76 Aug 18 2020 at 19:29

Yana pygame.Rectekranda bir alanı temsil etmesi gereken bir pygame.Rectnesne yalnızca tamamlayıcı veri depolar:

Rect nesnelerinin koordinatlarının tümü tam sayıdır. [...]

Nesne konumlarını kayan nokta doğruluğu ile depolamak istiyorsanız, nesnenin konumunu ayrı değişkenler ve nitelikler halinde saklamanız ve nesneyi senkronize etmeniz gerekir pygame.Rect. roundkoordinatları belirleyin ve .topleftdikdörtgenin konumuna (örneğin ) atayın :

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

Kendim test etmedim, bu yüzden işe yaramazsa özür dilerim ama python sayıyı bir dize olarak alıyor. int(variable)

Yapmalısın float(variable)