Pygame ไม่ให้ฉันใช้ float สำหรับ rect.move แต่ฉันต้องการมัน

Aug 18 2020

ฉันได้สร้างขึ้นเมื่อเร็ว ๆ นี้รุ่นของLunar Lander (คุณรู้ว่าเกมย้อนยุคเก่า) ในหลาม 3 และ Pygame: ย้ายแลนเดอร์ของฉัน ( rect.move) แต่ละเฟรมพร้อมแกน Y เพราะแรงโน้มถ่วง \.

ปัญหา:
จนกว่าฉันจะถึง 1 m / s ค่า y ที่เพิ่มให้กับ rect.move คือ float ต่ำกว่า 1: ฉันต้องใช้int()เพื่อปัดเศษขึ้นเนื่องจาก pygame ไม่ชอบการลอยตัว
ในเวอร์ชันก่อนหน้ากับ Tkinter พิกัด y ของแลนเดอร์เป็นดังนี้:

0.01
0.02
...
0.765
1.03
1.45
...

ใน pygame มัน

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

นี่เป็นเรื่องที่น่ารำคาญมากเนื่องจากการเคลื่อนไหวไม่ลื่นไหล มีใครรู้วิธีแก้ปัญหานี้บ้าง? เช่นใส่ลอยไปที่rect.move? ขอบคุณล่วงหน้า!

คำตอบ

4 Rabbid76 Aug 18 2020 at 19:29

เนื่องจากpygame.Rectควรจะเป็นตัวแทนของพื้นที่บนหน้าจอpygame.Rectวัตถุจึงสามารถเก็บข้อมูลที่สำคัญได้เท่านั้น:

พิกัดสำหรับวัตถุ Rect เป็นจำนวนเต็มทั้งหมด [... ]

หากคุณต้องการจัดเก็บตำแหน่งวัตถุที่มีความแม่นยำของจุดลอยตัวคุณจะต้องจัดเก็บตำแหน่งของวัตถุในตัวแปรแยกตามลำดับแอตทริบิวต์และเพื่อซิงโครไนซ์pygame.Rectวัตถุ roundพิกัดและกำหนดให้กับตำแหน่ง (เช่น.topleft) ของสี่เหลี่ยมผืนผ้า:

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

ฉันไม่ได้ทดสอบด้วยตัวเองดังนั้นฉันขอโทษถ้ามันไม่ได้ผล แต่ฉันคิดว่า python ใช้ตัวเลขเป็นสตริงดังนั้นแทนที่จะเป็น int(variable)

คุณควรทำ float(variable)