ปัจจุบันฉันมี platformer ที่มีแผ่นกระเบื้องสำหรับภูมิประเทศ (กราฟิกที่ยืมมาจาก Cave Story) เกมดังกล่าวเขียนขึ้นโดยใช้ XNA ดังนั้นฉันไม่ได้ใช้เอ็นจิ้นหรือเครื่องยนต์ฟิสิกส์ที่มีอยู่แล้ว
การชนกันของกระเบื้องมีการอธิบายค่อนข้างตรงตามที่อธิบายไว้ในคำตอบนี้ (ด้วย SAT แบบง่ายสำหรับสี่เหลี่ยมและวงกลม) และทุกอย่างทำงานได้ดี
ยกเว้นเมื่อผู้เล่นวิ่งชนกำแพงขณะล้ม / กระโดด ในกรณีนั้นพวกเขาจะติดกระเบื้องและเริ่มคิดว่าพวกเขาชนพื้นหรือเพดานที่ไม่มีอยู่จริง
ในภาพหน้าจอนี้ผู้เล่นเคลื่อนไปทางขวาและตกลงมา ดังนั้นหลังจากการเคลื่อนไหวจะมีการตรวจสอบการชน - และก่อนอื่นมันจะเปิดออกตัวละครของผู้เล่นจะชนกับไทล์ที่ 3 จากพื้นและผลักขึ้นไป ประการที่สองเขาพบว่าชนกับกระเบื้องข้างเขาและผลักไปด้านข้าง - ผลลัพธ์สุดท้ายคือตัวละครของผู้เล่นคิดว่าเขาอยู่บนพื้นและไม่ล้มและ 'จับ' บนไทล์ตราบเท่าที่เขาวิ่งเข้าไป .
ฉันสามารถแก้ปัญหานี้ได้ด้วยการกำหนดกระเบื้องจากบนลงล่างแทนซึ่งทำให้เขาล้มลงอย่างราบรื่น แต่แล้วกรณีผกผันก็เกิดขึ้นและเขาจะชนเพดานที่ไม่มีเมื่อกระโดดขึ้นไปบนกำแพง
ฉันจะแก้ไขปัญหานี้อย่างไรเพื่อให้ผู้เล่นสามารถตกไปตามกำแพงได้อย่างที่ควร