Pygame ไม่ให้ฉันใช้ float สำหรับ rect.move แต่ฉันต้องการมัน
ฉันได้สร้างขึ้นเมื่อเร็ว ๆ นี้รุ่นของ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
? ขอบคุณล่วงหน้า!
คำตอบ
เนื่องจากpygame.Rectควรจะเป็นตัวแทนของพื้นที่บนหน้าจอpygame.Rect
วัตถุจึงสามารถเก็บข้อมูลที่สำคัญได้เท่านั้น:
พิกัดสำหรับวัตถุ Rect เป็นจำนวนเต็มทั้งหมด [... ]
หากคุณต้องการจัดเก็บตำแหน่งวัตถุที่มีความแม่นยำของจุดลอยตัวคุณจะต้องจัดเก็บตำแหน่งของวัตถุในตัวแปรแยกตามลำดับแอตทริบิวต์และเพื่อซิงโครไนซ์pygame.Rect
วัตถุ roundพิกัดและกำหนดให้กับตำแหน่ง (เช่น.topleft
) ของสี่เหลี่ยมผืนผ้า:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
ฉันไม่ได้ทดสอบด้วยตัวเองดังนั้นฉันขอโทษถ้ามันไม่ได้ผล แต่ฉันคิดว่า python ใช้ตัวเลขเป็นสตริงดังนั้นแทนที่จะเป็น int(variable)
คุณควรทำ float(variable)