ฉันจะสร้างเอนจินฟิสิกส์ 2D ได้อย่างไร [ปิด]


20

เกมที่ทันสมัยที่สุดที่ฉันทำคือเกมพูล 8 ลูกที่สร้างด้วยเครื่องมือฟิสิกส์ Box2dFlashAS3 และเกมแพลตฟอร์มที่มีเลเวล

เมื่อฉันทำเกมแพลตฟอร์มฉันมักจะอยากรู้วิธีสร้างเครื่องยนต์เพื่อที่ฉันจะได้ใช้มันได้อีกครั้ง เมื่อฉันเห็นเกมที่มีทางลาดเอียงโค้งแรงโน้มถ่วงที่สมบูรณ์แบบและฟิสิกส์ในชีวิตจริงฉันหวังเสมอว่าฉันรู้วิธีการเขียนโปรแกรม

โปรดแนะนำเทคนิคและบทความสำหรับฐานความรู้ที่เกี่ยวข้องที่จำเป็น


คำตอบ:


16

ในขณะที่ฉันแนะนำให้ต่อต้านการหมุนเอนจินฟิสิกส์ของคุณเองสำหรับสิ่งอื่น ๆ นอกเหนือจากประสบการณ์ในการทำมัน (แค่ตระหนักว่าคุณน่าจะโยนมันทิ้งไปเมื่อคุณทำเสร็จแล้ว - มันยากมากที่จะได้รับ edgecases ทั้งหมด และเวลาของคุณอาจถูกใช้งานได้ดีขึ้นจากการมีส่วนร่วมกับเอ็นจิ้นที่มีอยู่เดิม) นี่คือทรัพยากรบางส่วน

บทเรียนห้องโถงสระว่ายน้ำ: การตรวจจับการชนที่รวดเร็วและแม่นยำระหว่างแวดวงหรือ Spheresพูดถึงวงกลม / วงกลมและการชนกันของทรงกลม / ทรงกลม

N สอนที่ยอดเยี่ยมสำหรับความเข้าใจพื้นฐานของการตรวจสอบการแยกแกนทฤษฎีบท-based และการตอบสนอง


9

Erin Catto มีการบรรยาย GDC ทั้งหมดเกี่ยวกับการนำ Box2D ไปใช้งานออนไลน์ Box2D ยังมีรหัสที่ตรงไปตรงมาเพื่ออ่านในประสบการณ์ของฉัน


ไฟล์ pdf เป็นวัสดุที่ยากมาก แต่เมื่อฉันอ่านไฟล์ cpp และ h ตามที่คุณพูดพวกเขา "เข้าใจ" ขอบคุณ
พระนารายณ์

+1 Box2D นั้นต้องระมัดระวังเกี่ยวกับความมั่นคงซึ่งเป็นหนึ่งในสิ่งที่ยากมากเมื่อคุณกลิ้งตัวเอง
อ่าน

5

นี่คือวิธีที่คุณสามารถทำได้:

การเคลื่อนไหวโดยประมาณ

วัตถุฟิสิกส์ทุกตัวต้องการเวกเตอร์เหล่านี้:

  • ตำแหน่ง : วัตถุอยู่ที่ไหน
  • ความเร็ว : ตำแหน่งมีการเปลี่ยนแปลงอย่างไร
  • การเร่งความเร็ว : การเปลี่ยนแปลงความเร็ว

ดังนั้นโดยสังหรณ์ใจคุณต้องทำสิ่งนี้ทุก ๆ เฟรมกับวัตถุฟิสิกส์a:

a.speed    += a.acceleration
a.position += a.speed

ข้อผิดพลาดนี้เป็นที่รู้จักกันเป็นวิธีการออยเลอร์ของการรวมกลุ่ม ประมาณนี้จะดีสำหรับความเร็วขนาดเล็กและการเร่งความเร็วและมีขนาดเล็กเวลาขั้นตอน ในเกมนี้เป็นเรื่องจริง แต่ถ้าวัตถุเคลื่อนที่อย่างรวดเร็วไปยังผนังบาง ๆ หรือไปยังวัตถุที่เคลื่อนที่อื่นโดยตรงมันอาจข้ามการชนกับวัตถุนั้นเมื่อตำแหน่งของมันถูกเพิ่มจำนวนมากพอที่จะข้ามมันได้ ถ้าคุณได้อย่างรวดเร็วย้ายวัตถุคุณอาจจะต้องตรวจสอบการชนอย่างต่อเนื่องจะได้รับไปด้วยนี้

การปะทะกัน

ชนสามารถประมาณมีการจัดเรียงลำดับนี้:

  1. การตรวจสอบ : มันมีการตรวจพบว่าทั้งสองศพตัด
  2. ความละเอียด : ตำแหน่งของแต่ละร่างกายมีการเปลี่ยนแปลงเพื่อให้พวกเขาตัดไม่
  3. ฟิสิกส์ : ความเร็วของแต่ละร่างกายจะเปลี่ยนเป็นบัญชีสำหรับโมเมนตัมแรงเสียดทานและการชดใช้ความเสียหาย (bounciness)

นี้เรียกว่าการตรวจสอบการชนแบบไม่ต่อเนื่องในขณะที่มันเกิดขึ้นในจุดที่ไม่ต่อเนื่องในเวลา แต่ละขั้นตอนสมควรได้รับความสนใจ:

ขั้นตอนที่ 1: ตรวจสอบการชน (เป็นสิ่งที่ชน?)

สำหรับสองวงการ : เพียงแค่ตรวจสอบว่าศูนย์ของพวกเขามากกว่าผลรวมของรัศมีของพวกเขาออกจากกัน

สำหรับรูปสี่เหลี่ยมสอง : ตรวจสอบถ้ามีพิกัดมุมของพวกเขาอยู่ในรูปสี่เหลี่ยมผืนผ้าอื่น ๆ

สำหรับสิ่งที่เกี่ยวข้องกับรูปหลายเหลี่ยมที่ซับซ้อนมากขึ้นคุณจะต้องแยกแกน-ทฤษฎีบทซึ่งเป็นหัวข้อสำหรับคำถามอื่น

ผิดพลาด : มีหลายประเภทจริงๆชนอื่น ๆที่คุณอาจต้องการที่จะต้องพิจารณา บางคนมีความซับซ้อนจริงๆ: รูปหลายเหลี่ยมนูนอาจตัดหลายครั้ง !

ขั้นตอนที่ 2: มติชน (การเคลื่อนย้ายออกจากกัน.)

วิธีง่ายๆในการแก้ไขปัญหาการปะทะกันเป็นแปลโดยเจาะขั้นต่ำโดยใช้ค่าที่ได้จากการตรวจสอบการชน นี้เป็นหลักที่เกี่ยวข้องกับการเคลื่อนย้ายวัตถุออกจากกันด้วยระยะทางที่เป็นไปได้น้อยของการเคลื่อนไหว

เป็นตัวอย่างให้พิจารณาชนวงกลมวงกลมที่หนึ่งของวงการได้รับการแก้ไขในสถานที่ เวกเตอร์ขั้นต่ำกระจัดมีทิศทางเดียวกับความแตกต่างระหว่างจุดกึ่งกลางเวกเตอร์ของพวกเขา ความยาวของมันคือความแตกต่างระหว่างผลรวมของรัศมีของพวกเขาและระยะห่างระหว่างศูนย์ฯ

ความคิดนี้ได้อย่างง่ายดาย generalises รูปทรงอื่น ๆ

หลุมพราง : หากวัตถุที่ชนกันทั้งสองเคลื่อนย้ายได้คุณอาจต้องย้ายทั้งสองอย่างด้วยระยะทางเศษส่วนโดยรวมเพื่อให้การเคลื่อนที่ของพวกเขาประมาณขึ้นโดยประมาณ เห็นได้ชัดว่าพวกเขาจะต้องย้ายไปในทิศทางที่แตกต่างกัน

ขั้นตอนที่ 3: ฟิสิกส์การชน (การเปลี่ยนแปลงอื่น ๆ )

สิ่งที่ชัดเจนที่สุดที่เกิดขึ้นคือวัตถุหนึ่งหรือสองชิ้นเปลี่ยนทิศทางคือหมุนเวกเตอร์ความเร็ว นี้จะสวยง่ายต่อการใช้

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

ข้อสรุปบางอย่าง

การจำลองความเป็นจริงนั้นยากขึ้นมากถ้าคุณต้องการจำลอง คุณกำลังเดินเข้าไปในเขตที่ขุดทุ่นระเบิดของคดีขอบอันนับไม่ถ้วนสูตรที่ยากจะนึกถึงและกองเอกสารวิจัยที่เพิ่มขึ้นเรื่อย ๆ

หากความต้องการของคุณง่ายหรือคุณอยากเรียนรู้ลองทำดู

หากความต้องการของคุณซับซ้อนหรือคุณไม่ชอบวิชาคณิตศาสตร์คุณสามารถใช้เครื่องมือฟิสิกส์เพื่อทำรายละเอียดให้คุณ Box2DและBulletเป็นที่นิยมในเกม



4

อาจเป็นแหล่งข้อมูลสไตล์การสอนที่ครอบคลุมที่สุด:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/

ดูบทความที่เกี่ยวข้องเหล่านี้จากบล็อกเดียวกัน:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- อย่างต่อเนื่องการปะทะกันเครื่องยนต์วิธีส่วน-1 /


1
รายการบล็อก wildbunny นั้นยอดเยี่ยม +1
พรรคคอมมิวนิสต์ Duck

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.