ฉันจะสร้างระเบิดระเบิดใน Farseer ที่ผลักวัตถุใกล้เคียงออกไปได้อย่างไร


14

ฉันพยายามสร้างระเบิดใน Farseer ฉันสร้างวงกลมสำหรับระเบิด อย่างไรก็ตามหากระเบิดระเบิดวัตถุ (ร่าง) ที่อยู่รอบ ๆ ควรบินหนีเพราะมันถูกผลักกลับด้วยแรงระเบิดมหาศาล ฉันไม่แน่ใจว่าจะสร้างแรงนั้นได้อย่างไร - ฉันจะทำมันได้อย่างไร


เป็นมูลค่าที่ชี้ให้เห็นว่า Farseer มาพร้อมกับตัวอย่างที่ใช้การระเบิด มันคือ "AdvancedDemo5" (ในแหล่งที่มาปัจจุบัน) มันคล้ายกับวิธีการใกล้ชิดในคำตอบที่ยอดเยี่ยมของ Classic Thunder มีความซับซ้อนน้อยกว่า (แรงกระตุ้นขนาดคงที่ภายใน AABB)
Andrew Russell

คำตอบ:


28

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

นอกจากนี้คุณต้องการที่จะใช้แรงกระตุ้นที่นี่ไม่บังคับ จะเข้าใจว่าทำไมอ่านนี้

วิธีการตั้ง

วิธีการตั้ง

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

ข้อดี:

  • เร็วมาก
  • รหัสง่าย

จุดด้อย:

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

วิธีการ Raycast

วิธีการ Raycast

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

ข้อดี:

  • ประสิทธิภาพที่เข้มข้นน้อยกว่าวิธีการของ projectiles
  • การระเบิดถูกบล็อกโดยวัตถุ
  • พื้นที่ผิวคำนึงถึง

จุดด้อย:

  • ทุกอย่างได้รับผลกระทบในครั้งเดียว
  • ยิ่งมีการระเบิดมากเท่าไหร่คุณก็ยิ่งต้องแน่ใจว่าการระเบิดนั้นส่งผลกระทบต่อทุกสิ่ง
  • ประสิทธิภาพที่เข้มข้นกว่าวิธีการใกล้เคียง

วิธีการของอนุภาค

วิธีการของอนุภาค

ฉันชอบส่วนตัว คล้ายกับวิธีการ RaySasting แต่แทนที่จะเป็นรังสีคุณใช้เครื่องมือฟิสิกส์แล้วปล่อยเม็ดเล็ก ๆ ที่มีปฏิสัมพันธ์กับฉากของคุณ

ข้อดี:

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

จุดด้อย:

  • เพิ่มความซับซ้อนต่อขีด

5
คำตอบที่ดีมาก ฉันชอบวิธีการของอนุภาคเป็นพิเศษ ดูเหมือนว่ามันจะทำให้การระเบิดที่ทรงพลังทำได้ยากขึ้น มันเป็นเรื่องเล็กน้อยที่จะทำให้อนุภาคมีมวลมากขึ้นหรือไม่?
MichaelHouse

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

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

@ ตนเอง Box2D ช่วยให้คุณเพิ่มการทำให้หมาด ๆ ของวัตถุที่ช้าลงตามลำดับในอัตราที่แน่นอนนี่เป็นเทคนิคที่ใช้ใน gif
ClassicThunder

1
คำตอบที่ยอดเยี่ยม :) ฉันจะเพิ่มอีกหนึ่ง pro ในวิธีสุดท้ายเพื่อที่คุณสามารถใช้ตำแหน่งเม็ดเพื่อวาดควันหรือฝุ่นที่ดูดี
iforce2d

2
  • เลือกวัตถุทั้งหมดภายในรัศมีอิทธิพลของระเบิด
  • สำหรับแต่ละวัตถุ
    • ใช้ตำแหน่งวัตถุและศูนย์กลางของการระเบิดเพื่อคำนวณเวกเตอร์ของแรงกระตุ้น normalize(object - center)สิ่งที่ชอบ
    • ใช้ระยะทางจากศูนย์กลางของระเบิดไปยังวัตถุเพื่อคำนวณขนาดของแรงกระตุ้น สิ่งที่ต้องการ(object - center).length
    • ใช้แรงกระตุ้นกับวัตถุโดยใช้เวกเตอร์และขนาดที่พบในขั้นตอนก่อนหน้า

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


กองกำลังใช้เมื่อคุณต้องการมีอิทธิพลกับวัตถุในช่วงเวลาหนึ่งซึ่งไม่ใช่สถานการณ์ที่นี่ มันจะถูกต้องมากขึ้นในการใช้แรงกระตุ้น
ClassicThunder

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