นี่คือวิธีที่คุณสามารถทำได้:
การเคลื่อนไหวโดยประมาณ
วัตถุฟิสิกส์ทุกตัวต้องการเวกเตอร์เหล่านี้:
- ตำแหน่ง : วัตถุอยู่ที่ไหน
- ความเร็ว : ตำแหน่งมีการเปลี่ยนแปลงอย่างไร
- การเร่งความเร็ว : การเปลี่ยนแปลงความเร็ว
ดังนั้นโดยสังหรณ์ใจคุณต้องทำสิ่งนี้ทุก ๆ เฟรมกับวัตถุฟิสิกส์a
:
a.speed += a.acceleration
a.position += a.speed
ข้อผิดพลาดนี้เป็นที่รู้จักกันเป็นวิธีการออยเลอร์ของการรวมกลุ่ม ประมาณนี้จะดีสำหรับความเร็วขนาดเล็กและการเร่งความเร็วและมีขนาดเล็กเวลาขั้นตอน ในเกมนี้เป็นเรื่องจริง แต่ถ้าวัตถุเคลื่อนที่อย่างรวดเร็วไปยังผนังบาง ๆ หรือไปยังวัตถุที่เคลื่อนที่อื่นโดยตรงมันอาจข้ามการชนกับวัตถุนั้นเมื่อตำแหน่งของมันถูกเพิ่มจำนวนมากพอที่จะข้ามมันได้ ถ้าคุณได้อย่างรวดเร็วย้ายวัตถุคุณอาจจะต้องตรวจสอบการชนอย่างต่อเนื่องจะได้รับไปด้วยนี้
การปะทะกัน
ชนสามารถประมาณมีการจัดเรียงลำดับนี้:
- การตรวจสอบ : มันมีการตรวจพบว่าทั้งสองศพตัด
- ความละเอียด : ตำแหน่งของแต่ละร่างกายมีการเปลี่ยนแปลงเพื่อให้พวกเขาตัดไม่
- ฟิสิกส์ : ความเร็วของแต่ละร่างกายจะเปลี่ยนเป็นบัญชีสำหรับโมเมนตัมแรงเสียดทานและการชดใช้ความเสียหาย (bounciness)
นี้เรียกว่าการตรวจสอบการชนแบบไม่ต่อเนื่องในขณะที่มันเกิดขึ้นในจุดที่ไม่ต่อเนื่องในเวลา แต่ละขั้นตอนสมควรได้รับความสนใจ:
ขั้นตอนที่ 1: ตรวจสอบการชน (เป็นสิ่งที่ชน?)
สำหรับสองวงการ : เพียงแค่ตรวจสอบว่าศูนย์ของพวกเขามากกว่าผลรวมของรัศมีของพวกเขาออกจากกัน
สำหรับรูปสี่เหลี่ยมสอง : ตรวจสอบถ้ามีพิกัดมุมของพวกเขาอยู่ในรูปสี่เหลี่ยมผืนผ้าอื่น ๆ
สำหรับสิ่งที่เกี่ยวข้องกับรูปหลายเหลี่ยมที่ซับซ้อนมากขึ้นคุณจะต้องแยกแกน-ทฤษฎีบทซึ่งเป็นหัวข้อสำหรับคำถามอื่น
ผิดพลาด : มีหลายประเภทจริงๆชนอื่น ๆที่คุณอาจต้องการที่จะต้องพิจารณา บางคนมีความซับซ้อนจริงๆ: รูปหลายเหลี่ยมนูนอาจตัดหลายครั้ง !
ขั้นตอนที่ 2: มติชน (การเคลื่อนย้ายออกจากกัน.)
วิธีง่ายๆในการแก้ไขปัญหาการปะทะกันเป็นแปลโดยเจาะขั้นต่ำโดยใช้ค่าที่ได้จากการตรวจสอบการชน นี้เป็นหลักที่เกี่ยวข้องกับการเคลื่อนย้ายวัตถุออกจากกันด้วยระยะทางที่เป็นไปได้น้อยของการเคลื่อนไหว
เป็นตัวอย่างให้พิจารณาชนวงกลมวงกลมที่หนึ่งของวงการได้รับการแก้ไขในสถานที่ เวกเตอร์ขั้นต่ำกระจัดมีทิศทางเดียวกับความแตกต่างระหว่างจุดกึ่งกลางเวกเตอร์ของพวกเขา ความยาวของมันคือความแตกต่างระหว่างผลรวมของรัศมีของพวกเขาและระยะห่างระหว่างศูนย์ฯ
ความคิดนี้ได้อย่างง่ายดาย generalises รูปทรงอื่น ๆ
หลุมพราง : หากวัตถุที่ชนกันทั้งสองเคลื่อนย้ายได้คุณอาจต้องย้ายทั้งสองอย่างด้วยระยะทางเศษส่วนโดยรวมเพื่อให้การเคลื่อนที่ของพวกเขาประมาณขึ้นโดยประมาณ เห็นได้ชัดว่าพวกเขาจะต้องย้ายไปในทิศทางที่แตกต่างกัน
ขั้นตอนที่ 3: ฟิสิกส์การชน (การเปลี่ยนแปลงอื่น ๆ )
สิ่งที่ชัดเจนที่สุดที่เกิดขึ้นคือวัตถุหนึ่งหรือสองชิ้นเปลี่ยนทิศทางคือหมุนเวกเตอร์ความเร็ว นี้จะสวยง่ายต่อการใช้
หลุมพราง : วัตถุอาจมีความยืดหยุ่นแต่อาจไม่ใช่ในกรณีนี้พลังงานทั้งหมดในระบบจะลดลง คุณอาจต้องลากเนื่องจากแรงต้านของอากาศ แรงเสียดทาน (โดยเฉพาะแรงเสียดทานแบบคงที่ ) เป็นอย่างฉาวโฉ่ที่ซับซ้อนในการดำเนินการ
ข้อสรุปบางอย่าง
การจำลองความเป็นจริงนั้นยากขึ้นมากถ้าคุณต้องการจำลอง คุณกำลังเดินเข้าไปในเขตที่ขุดทุ่นระเบิดของคดีขอบอันนับไม่ถ้วนสูตรที่ยากจะนึกถึงและกองเอกสารวิจัยที่เพิ่มขึ้นเรื่อย ๆ
หากความต้องการของคุณง่ายหรือคุณอยากเรียนรู้ลองทำดู
หากความต้องการของคุณซับซ้อนหรือคุณไม่ชอบวิชาคณิตศาสตร์คุณสามารถใช้เครื่องมือฟิสิกส์เพื่อทำรายละเอียดให้คุณ Box2DและBulletเป็นที่นิยมในเกม