Pygame, rect.move için float kullanmama izin vermiyor, ama buna ihtiyacım var
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
Yana pygame.Rectekranda bir alanı temsil etmesi gereken bir pygame.Rect
nesne 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 .topleft
dikdörtgenin konumuna (örneğin ) atayın :
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
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)