คำถามติดแท็ก collision-detection

การตรวจจับการชนกันคือการพิจารณาว่าเอนทิตีสองคนหรือมากกว่านั้นทำการติดต่อกันระหว่างการเล่นเกม

2
ปัญหาการข้ามแพลตฟอร์มด้วยการชน AABB
ดูแผนภาพแรก: เมื่อเอนจิน AABB ฟิสิกส์ของฉันแก้ไขการตัดกันมันจะทำเช่นนั้นโดยการค้นหาแกนที่การแทรกซึมมีขนาดเล็กลงจากนั้น "ผลัก" เอนทิตีบนแกนนั้น พิจารณาตัวอย่าง "การย้ายที่กำลังกระโดดซ้าย" ถ้า velocityX ใหญ่กว่า velocityY AABB จะผลักเอนทิตีออกไปบนแกน Y แล้วหยุดการกระโดดได้อย่างมีประสิทธิภาพ (ผลลัพธ์: ผู้เล่นหยุดกลางอากาศ) ถ้า velocityX มีขนาดเล็กกว่า velocitY (ไม่แสดงในแผนภาพ) โปรแกรมทำงานตามที่ตั้งใจไว้เพราะ AABB ผลักเอนทิตีออกไปบนแกน X ฉันจะแก้ปัญหานี้ได้อย่างไร รหัสแหล่งที่มา: public void Update() { Position += Velocity; Velocity += World.Gravity; List<SSSPBody> toCheck = World.SpatialHash.GetNearbyItems(this); for (int i = 0; i < …

1
วิธีการสร้างการตรวจจับการชนเกม 2D สมจริง
ฉันอยากจะสร้างเกมสวมบทบาท 2D สมัยเก่าเช่น Star Ocean, Final Fantasy, Sword of Mana และแม้กระทั่งซีรีส์เรื่อง "Tales of" และฉันคิดว่าผู้คนจำนวนมากทำ แต่ก่อนที่ฉันจะเขียนรหัสบรรทัดเดียวฉันได้ทำการค้นคว้ามากมายวาดและทดลอง ฉันพบคำตอบสำหรับคำถามของฉันเกือบทั้งหมดแล้ว แต่มีปัญหาที่ฉันไม่สามารถแก้ไขได้: คุณสร้างการตรวจจับการชนที่สมจริง แต่เรียบง่ายได้อย่างไรเช่นในเกมที่ฉันตั้งชื่อมาก่อน ฉันรู้วิธีการคำนวณการตรวจจับการชนกันหลายวิธีแล้วให้ดูตัวอย่างต่อไปนี้: สิ่งเหล่านี้ไม่ตรงกับความต้องการของฉัน การชนแบบเรียงต่อกันนั้นง่ายเกินไปและเหมาะสมกับเซลด้ามากกว่าสตาร์โอเชียน นอกจากนี้การวาดภาพของแต่ละกระเบื้องต้องเติมเต็มพื้นที่ทั้งหมดเพื่อให้ดูสมจริง Pixel-perfect มีข้อ จำกัด มากเกินไป หากไทล์ของคุณมีพิกเซลอยู่ที่นี่และที่นั่นผู้เล่นมักจะติดอยู่ที่กลางคัน (เช่น: ในบางเกมที่คุณติดอยู่ที่รากต้นไม้กว้าง 2 พิกเซล) และมาสก์ไบนารีจะใช้หน่วยความจำและการตั้งค่ามากเกินไป ฉันอ่านเอกสารจำนวนมาก แต่ฉันไม่เคยพบสิ่งที่ดูดีสำหรับฉันเลย และการทดลองทั้งหมดของฉันไม่ได้ดูใกล้เคียงกับสิ่งที่ฉันเคยเล่นด้วย ดังนั้นหากคุณมีลิงค์หรือแบบฝึกหัดที่ดีเกี่ยวกับการทำงานของเกม RPG แบบสองมิติที่มีวิวัฒนาการ

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

2
จำลองวัตถุที่ลอยอยู่บนน้ำ
ฉันกำลังทำเกมตกปลาบนลงล่าง ฉันต้องการใช้งานฟิสิกส์และการตรวจจับการชนเกี่ยวกับเรือที่แล่นไปรอบ ๆ ทะเลสาบ ฉันต้องการที่จะใช้แรงผลักดันจากมอเตอร์หลักหรือมอเตอร์หมุนรอบผลของลมบนวัตถุและการลากน้ำบนวัตถุ ฉันได้ดูเครื่องยนต์ฟิสิกส์ของฟาร์เซ่อร์ แต่ไม่มีประสบการณ์ใด ๆ ในการใช้เครื่องมือฟิสิกส์ฉันไม่แน่ใจว่าฟาร์เซ่อร์เหมาะสำหรับสิ่งประเภทนี้ (การสาธิตส่วนใหญ่ดูเหมือนจะใช้แรงโน้มถ่วงกับแนวตั้ง รุ่นประเภทบน / ล่าง) เครื่องยนต์ Farseer จะเหมาะสมหรือไม่? หรือเครื่องยนต์ที่แตกต่างจะเหมาะกว่านี้หรือไม่

2
การทดสอบจุดตัดขอบกล่องวัตถุ 2 มิติชิดขอบ
ฉันมีสองกล่องขอบเขตวัตถุจัดชิด (เช่นไม่จัดแนวแกนพวกเขาหมุนด้วยวัตถุ) ฉันต้องการทราบว่ากล่องที่วางวัตถุสองกล่องซ้อนทับกันหรือไม่ ( แก้ไข: หมายเหตุ - ฉันกำลังใช้การทดสอบกล่องที่มีขอบเป็นแนวแกนเพื่อกำจัดวัตถุที่อยู่ไกลออกไปอย่างรวดเร็วดังนั้นมันจึงไม่สำคัญว่ารูทีนรูปสี่เหลี่ยมจะช้ากว่าเล็กน้อย ) กล่องของฉันถูกจัดเก็บเป็นสี่ x, y คะแนน ฉันค้นหาคำตอบแล้ว แต่ฉันไม่เข้าใจชื่อตัวแปรและอัลกอริทึมในตัวอย่างเพื่อนำไปใช้กับกรณีเฉพาะของฉัน มีใครช่วยแสดงให้ฉันเห็นว่าจะทำอย่างไรในวิธีที่ชัดเจนและเรียบง่าย? ขอบคุณ (ภาษานั้นไม่สำคัญรหัสหลอกแบบ C คือ OK)

3
วิธีการตรวจสอบการชนระหว่างสไปรท์และผู้ใช้สร้างรูปร่างของการจัดเรียงบางอย่าง?
วิธีการตรวจจับการชนกันระหว่างสไปรต์และรูปร่างที่ผู้ใช้สร้างขึ้นของการจัดเรียงบางอย่าง ตัวอย่างเช่น. มีวัตถุบางอย่างบนหน้าจอ ผู้ใช้ใช้นิ้วของพวกเขาและวาดรูปวงกลมรอบ ๆ วัตถุ (กฎการเลือกคือการวาดวงกลมรอบ ๆ เทพดา แต่รูปร่างการวาดอาจแตกต่างกัน) ฉันต้องการตรวจจับวัตถุที่เลือกซึ่งก็เหมือนกับ: (ภาพตัวอย่าง):

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

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