วิธีแยกวัตถุที่มีการชนกันโดยไม่สร้างการชนกันมากขึ้น


11

สมมติว่าฉันใช้ระบบตรวจจับการชนกันแบบง่าย ๆ ซึ่งฉันย้ายวัตถุทั้งหมดแล้วตรวจสอบการชนกัน ฉันต้องการให้วัตถุที่มีการชนกันถูกแยกออก (แน่นอน) และกำหนดความเร็วการตอบสนองที่เหมาะสม (การตีกลับสไลด์หยุด ฯลฯ )

เมื่อฉันมีวัตถุที่มีการชนกันอยู่หนึ่งคู่ฉันจะแยกวัตถุเหล่านั้นออกได้อย่างไรโดยไม่ลงท้ายด้วยวัตถุหนึ่งหรือทั้งสองชนกับวัตถุอื่น

คำตอบ:


8

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

Erin Catto ให้คำอธิบายที่ดีเกี่ยวกับตัวแก้แรงกระตุ้นตามลำดับที่ GDC หลายตัวก่อนหน้านี้พวกเขาสามารถดาวน์โหลดได้จากหน้าดาวน์โหลด Box2Dดูตัวอย่างของ GDC 2009


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

2
ไม่ได้จริงๆ ในสมัยก่อน (SNES เป็นต้น) พวกเขามีปัญหาแบบนี้กับการเปลี่ยนแปลงการออกแบบเกมหรือการประนีประนอม เช่น. ใน Super Mario เมื่อผู้เล่นโดนโจมตี Mario จะอยู่ยงคงกระพันสองสามวินาทีเพื่อเลี่ยงการชนครั้งที่สอง ใน Double Dragon การชนจะถูกละเว้นสำหรับผู้เล่นจนกว่าภาพเคลื่อนไหวสำหรับการถอยกลับจะเสร็จสิ้น
yaustar

@ yustar จริงๆแล้วมาริโอไม่มีการปะทะกับศัตรูเลย มันจะได้รับความเสียหายเมื่อ hitbox ทับมัน
ฤดูหนาว

3

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

หากไม่มีการเจาะเกิดขึ้นคุณไม่จำเป็นต้องรีเซ็ตตำแหน่งใด ๆ ดังนั้นคุณจะไม่กระตุ้นการเจาะรองใด ๆ


2

สิ่งที่ฉันมักจะทำมีดังต่อไปนี้:

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


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