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

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

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

10
วิธีที่เร็วที่สุดในการหาจุดตัดขอบ 2D คืออะไร
สมมติว่าแต่ละกล่องวัตถุมีคุณสมบัติ x, y, ความกว้างความสูงและมีต้นกำเนิดที่จุดศูนย์กลางของพวกเขาและไม่ว่าวัตถุหรือกล่องขอบเขตการหมุน

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

10
อัลกอริธึมการชน AABB ที่มีประสิทธิภาพมากที่สุด
มีอัลกอริทึมที่รู้จักกันดีที่สุดสำหรับการตรวจจับการชนกันของ AABB กับเรย์หรือไม่? เมื่อเร็ว ๆ นี้ฉันได้พบกับอัลกอริทึม AABB vs Sphere collision ของ Arvo และฉันสงสัยว่ามีอัลกอริธึมที่น่าสังเกตเช่นนี้หรือไม่ สิ่งหนึ่งที่ต้องมีเงื่อนไขสำหรับอัลกอริทึมนี้คือฉันต้องมีตัวเลือกในการค้นหาผลลัพธ์สำหรับระยะทางจากจุดกำเนิดของรังสีไปยังจุดที่เกิดการชน ต้องบอกว่าถ้ามีอีกอัลกอริทึมที่เร็วกว่าซึ่งไม่ได้ส่งกลับระยะทางแล้วนอกจากการโพสต์อันที่ทำแล้วการโพสต์อัลกอริธึมก็จะมีประโยชน์มากเช่นกัน โปรดระบุว่าอาร์กิวเมนต์ส่งคืนของฟังก์ชันคืออะไรและคุณใช้เพื่อคืนค่าระยะทางหรือกรณี 'ไม่ชนกัน' ได้อย่างไร ตัวอย่างเช่นมันมีพารามิเตอร์ out สำหรับระยะทางรวมถึงค่าส่งคืน bool หรือไม่ หรือเพียงแค่คืนลอยตามระยะทางเทียบกับค่า -1 สำหรับไม่มีการชนกันหรือไม่ (สำหรับผู้ที่ไม่ทราบ: AABB = กล่องจัดแนวขอบเขตของแนวแกน)

7
ปัญหาการปะทะกันของ Platformer AABB 2D
ฉันมีปัญหากับการแก้ไขการชนของ AABB ฉันแก้ไขทางแยก AABB โดยการแก้ไขแกน X ก่อนแล้วตามด้วยแกน Y สิ่งนี้ทำเพื่อป้องกันข้อผิดพลาดนี้: http://i.stack.imgur.com/NLg4j.png วิธีการปัจจุบันทำงานได้ดีเมื่อวัตถุเคลื่อนที่เข้าสู่เครื่องเล่นและผู้เล่นจะต้องถูกผลักในแนวนอน อย่างที่คุณเห็นใน. gif แหลมแนวนอนผลักผู้เล่นอย่างถูกต้อง เมื่อหนามแหลมแนวตั้งเคลื่อนที่เข้าหาผู้เล่นแกน X จะยังคงได้รับการแก้ไขก่อน สิ่งนี้ทำให้ "ใช้เดือยเป็นยก" เป็นไปไม่ได้ เมื่อผู้เล่นย้ายเข้ามาในแนวดิ่งแหลม (ได้รับผลกระทบจากแรงโน้มถ่วงตกเข้าไปในพวกเขา) เขาผลักแกน Y เพราะไม่มีการทับซ้อนกันบนแกน X เพื่อเริ่มต้น สิ่งที่ฉันลองใช้เป็นวิธีที่อธิบายไว้ในคำตอบแรกของลิงค์นี้: การตรวจจับการชนกันของวัตถุสี่เหลี่ยม 2 มิติ อย่างไรก็ตามสไปค์และวัตถุที่กำลังเคลื่อนที่จะเคลื่อนที่โดยการเปลี่ยนตำแหน่งของมันไม่ใช่ความเร็วและฉันจะไม่คำนวณตำแหน่งที่คาดการณ์ถัดไปจนกว่าจะมีการเรียกเมธอด Update () จำเป็นต้องพูดวิธีนี้ไม่ได้ผลเช่นกัน :( ฉันต้องแก้ปัญหาการชนกันของ AABB ในแบบที่ทั้งสองกรณีที่อธิบายไว้ข้างต้นทำงานได้ตามที่ตั้งใจไว้ นี่คือรหัสที่มาการชนกันของฉันในปัจจุบัน: http://pastebin.com/MiCi3nA1 ฉันรู้สึกขอบคุณจริง ๆ ถ้ามีคนสามารถตรวจสอบเรื่องนี้ได้เนื่องจากข้อผิดพลาดนี้ปรากฏอยู่ในเครื่องยนต์ตั้งแต่ต้นและฉันพยายามดิ้นรนเพื่อหาทางออกที่ดีโดยไม่ประสบความสำเร็จ สิ่งนี้ทำให้ฉันใช้เวลาหลายคืนในการดูรหัสการชนและป้องกันไม่ให้ฉันไปที่ "ส่วนที่สนุกสนาน" และเข้ารหัสตรรกะของเกม :( ฉันพยายามใช้ระบบการชนกันเช่นเดียวกับในการสาธิตแพลตฟอร์ม XNA …

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

5
นักแสดงในเกมควรมีความรับผิดชอบในการวาดภาพตนเองหรือไม่?
ฉันยังใหม่ต่อการพัฒนาเกม แต่ไม่ได้เขียนโปรแกรม ฉัน (อีกครั้ง) เล่นกับเกมประเภท Pong โดยใช้canvasองค์ประกอบของ JavaScript ฉันสร้างPaddleวัตถุที่มีคุณสมบัติดังต่อไปนี้ ... width height x y colour ฉันยังมีPongวัตถุที่มีคุณสมบัติเช่น ... width height backgroundColour draw(). draw()วิธีการในปัจจุบันคือการรีเซ็ตcanvasและที่เป็นที่คำถามขึ้นมา ควรPaddleวัตถุมีdraw()วิธีการรับผิดชอบสำหรับการวาดภาพหรือควรdraw()ของPongวัตถุต้องรับผิดชอบสำหรับการวาดภาพของนักแสดง (ฉันคิดว่าเป็นคำที่ถูกต้องโปรดแก้ไขฉันหากฉันไม่ถูกต้อง) ฉันคิดว่ามันจะเป็น advantagous สำหรับPaddleการวาดตัวเองที่ผมยกตัวอย่างวัตถุสองและPlayer Enemyถ้ามันไม่ได้อยู่ในPongของdraw()ฉันจะต้องเขียนรหัสที่คล้ายกันสองครั้ง การปฏิบัติที่ดีที่สุดที่นี่คืออะไร? ขอบคุณ

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

6
ฉันจะคำนวณระยะห่างระหว่างจุดและสี่เหลี่ยมผืนผ้าที่จัดแนวแกนได้อย่างไร
ฉันมีรูปสี่เหลี่ยมผืนผ้า 2 มิติที่มี x, ตำแหน่ง y, ความสูงและความกว้างและมีตำแหน่งที่อยู่ใกล้เคียงแบบสุ่ม มีวิธีการตรวจสอบว่าจุดนี้อาจชนกับสี่เหลี่ยมถ้ามันใกล้กว่าระยะทางที่กำหนดหรือไม่ ลองจินตนาการถึงรัศมีที่มองไม่เห็นนอกจุดที่ชนกับสี่เหลี่ยมดังกล่าว ฉันมีปัญหากับเรื่องนี้เพียงเพราะมันไม่ใช่สแควร์!

3
มีกี่แกนที่จะใช้สำหรับการชน OBB 3D กับ SAT
ฉันใช้ SAT ตาม: การตรวจจับการชนแบบไดนามิกโดยใช้กล่องที่มุ่งเน้นการละเมิด [PDF] ในหน้า 7 ในตารางมันหมายถึง 15 แกนเพื่อทดสอบเพื่อให้เราสามารถหาการชนกัน แต่ด้วย Axe, Ay และ Az ฉันได้รับการชนกันแล้ว ทำไมฉันต้องทดสอบเคสอื่นทั้งหมด มีสถานการณ์ใดที่ Axe, Ay และ Az ไม่พอ?

6
จะตัดสินใจได้อย่างไรว่า GameObject ควรจัดการกับการชนกันอย่างไร
ไม่ว่าจะเกิดการชนกัน GameObjects สองรายการมีส่วนเกี่ยวข้องหรือไม่ สิ่งที่ฉันต้องการที่จะรู้คือผมจะตัดสินใจอย่างไรว่าวัตถุที่ควรมีของฉันOnCollision*? ตัวอย่างเช่นสมมติว่าฉันมีวัตถุผู้เล่นและวัตถุเข็ม ความคิดแรกของฉันคือการวางสคริปต์บนโปรแกรมเล่นที่มีรหัสดังนี้: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Spike")) { Destroy(gameObject); } } แน่นอนว่าฟังก์ชั่นเดียวกันนี้สามารถทำได้โดยแทนที่จะมีสคริปต์บนออบเจ็กต์ Spike ที่มีรหัสดังนี้: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Player")) { Destroy(coll.gameObject); } } ขณะที่ทั้งสองมีความถูกต้องมันจะทำให้รู้สึกมากขึ้นกับผมที่จะมีสคริปต์ในการเล่นเพราะในกรณีนี้เมื่อการปะทะกันเกิดขึ้นการดำเนินการจะถูกดำเนินการบนเครื่องเล่น อย่างไรก็ตามสิ่งที่ทำให้ฉันสงสัยว่านี่คือในอนาคตคุณอาจต้องการเพิ่มวัตถุอื่น ๆ ที่จะฆ่าผู้เล่นในการปะทะกันเช่นศัตรู, ลาวา, ลำแสงเลเซอร์ ฯลฯ วัตถุเหล่านี้อาจมีแท็กที่แตกต่างกัน ดังนั้นสคริปต์บน Player จะกลายเป็น: OnCollisionEnter(Collision coll) { GameObject other = coll.gameObject; if (other.compareTag("Spike") || other.compareTag("Lava") || …

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

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

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

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

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