จะใช้การระเบิดแบบ 2d ซึ่งจะสร้างความเสียหายโดยคำนึงถึงการครอบคลุมและระยะทางอย่างไร


9

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

ฉันจะใช้พอร์ตของเครื่องยนต์ฟิสิกส์ Box2D - Farseer

ขอบคุณ.


1
Wiki ( goo.gl/c1OJx ) แนะนำให้ใช้อนุภาคที่อาจสมเหตุสมผลเนื่องจากเป็นการจำลองกระบวนการทางกายภาพจริง มีใครคิดว่าวิธีการดังกล่าว?
Den

1
ที่เกี่ยวข้อง: gamedev.stackexchange.com/questions/14171/…
finnw

คำตอบ:


8

วิธีการที่ง่ายวิธีหนึ่งในการทำเช่นนี้คือการดึงแสงจากจุดศูนย์กลางของการระเบิดไปยังศูนย์กลางของทุกเอนทิตีที่DISTANCE(explosion,entity) < exlosion.max_radius(รหัสหลอก)

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

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

สำหรับวิธีนี้คุณอาจต้องการความเสียหายพื้นฐานที่ค่อนข้างสูงซึ่งจะลดลงอย่างรวดเร็วตามระยะทาง


อีกวิธีคือการวาดภาคที่มีเอนทิตีอย่างสมบูรณ์ แต่ไม่กว้างขึ้น .max_radiusและทุกอย่างออกไป ลบออกจากพื้นที่ของเซกเตอร์นี้พื้นที่ที่ครอบคลุมโดยการครอบคลุมใด ๆ ระหว่างการระเบิดและเอนทิตีที่คูณด้วยค่าความคุ้มครอง พื้นที่ที่เหลือคือความเสียหายจากการระเบิดของคุณ

ผลข้างเคียงที่ประณีตอย่างหนึ่งของเรื่องนี้คือยิ่งเอนทิตีใกล้กับการระเบิดยิ่งเซกเตอร์กว้างขึ้นและยิ่งคุณได้รับความเสียหายมากขึ้นเท่าไหร่ (เมื่อคุณนับพื้นที่ทั้งหมดของเซกเตอร์และลบพื้นที่ครอบคลุมระหว่าง เอนทิตีและการระเบิด

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


มีวิธีการที่สวยงามและฉลาดกว่านี้อย่างแน่นอน แต่ก็อาจต้องใช้แคลคูลัสที่น่ารังเกียจ มันมักจะทำ


0

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

สิ่งที่คุณต้องทำคือคำนวณระยะทางของผู้เล่นจากพิกัดของจุดศูนย์กลางของการระเบิดโดยใช้ทฤษฏีของ Pythagoras จากนั้นใช้สิ่งนั้นเทียบกับรัศมีสูงสุดเพื่อคำนวณเปอร์เซ็นต์ความเสียหายทั้งหมด

ตัวอย่างเช่นใช้พิกัด (x1, y1) เป็นจุดศูนย์กลางของการระเบิดและ (x2, y2) เป็นพิกัดของผู้เล่น จากนั้นเราสามารถคำนวณความเสียหายที่ได้รับดังนี้:

Distance from centre = sqrt((x2-x1 + (y2-y1)²)
Damage taken = (Distance from centre/Explosion radius) * max damage 

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

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