2d विस्फोटों को कैसे लागू किया जाए जो नुकसान को कवर और दूरी को ध्यान में रखते हैं?


9

मैं एक तरह से 2 डी विस्फोट को कैसे लागू कर सकता हूं कि यह उन पात्रों को कम नुकसान पहुंचाएगा जो क्रेट या अन्य कवर के पीछे छिपते हैं? आदर्श रूप से नुकसान कवर की ताकत पर निर्भर करेगा (जैसे धातु की दीवार बेहतर रक्षा करेगा फिर लकड़ी के टोकरे)। आदर्श रूप से क्षति दूरी के साथ ही घटेगी।

मैं Box2D भौतिकी इंजन के एक बंदरगाह का उपयोग करने जा रहा हूं - फ़र्सर।

धन्यवाद।


1
विकी ( goo.gl/c1OJx ) उन कणों का उपयोग करने की सिफारिश करता है जो वास्तव में समझ में आ सकते हैं क्योंकि यह वास्तविक भौतिक प्रक्रियाओं का अनुकरण करता है। क्या किसी ने इस तरह के दृष्टिकोण पर विचार किया है?
डेन

जवाबों:


8

ऐसा करने का एक अपेक्षाकृत सरल तरीका विस्फोट की केंद्र से प्रत्येक इकाई के केंद्र में एक किरण को खींचना है जहां DISTANCE(explosion,entity) < exlosion.max_radius(छद्म कोड)।

प्रत्येक इकाई के लिए, इस किरण का अनुसरण करें, जैसे-जैसे आप जाते हैं, बेस क्षति कम होती जाती है। जब भी आप किसी ऑब्जेक्ट को हिट करते हैं, तो यह क्षति से कवर मूल्य (मूल रूप से किरण को छोटा करना) है।

जब किरण इकाई से टकराती है, तो जो कुछ भी बचा है वह आपके विस्फोट क्षति है।

इस दृष्टिकोण के लिए, आप संभवतः एक उच्च आधार क्षति चाहते हैं जो दूरी के साथ तेजी से घट जाती है (दूरी के वर्ग के विपरीत आनुपातिक रूप से अच्छी तरह से करना चाहिए)।


एक अन्य दृष्टिकोण एक ऐसे क्षेत्र को खींचना है जिसमें पूरी तरह से इकाई शामिल है; लेकिन कोई व्यापक नहीं; और सभी तरह से बाहर .max_radius। इस क्षेत्र के क्षेत्र से घटाएं विस्फोट और इकाई के बीच किसी भी कवर द्वारा कवर किया गया क्षेत्र, इसके कवर मूल्य से गुणा किया जाता है। शेष क्षेत्र आपकी ब्लास्ट क्षति है।

इसका एक साफ-सुथरा साइड इफेक्ट यह है कि विस्फोट के लिए इकाई जितनी करीब होती है, उतना ही व्यापक क्षेत्र मिलता है, और जितना नुकसान आप उठाते हैं (जैसा कि आप सेक्टर के सभी क्षेत्र को गिनते हैं, और सिर्फ बीच के कवर के क्षेत्र को घटाते हैं इकाई और विस्फोट।

यह कवर के रूप में संस्थाओं के लिए भी उपयोगी हो सकता है; और बस उन संस्थाओं से जो आगे निकले हैं, उससे होने वाली क्षति को घटाते हैं, लेकिन यह शायद ही हो।


वहाँ निस्संदेह एक और भी अधिक सुंदर और चतुर दृष्टिकोण मौजूद है, लेकिन इसे शायद कुछ बहुत बुरा गणना की आवश्यकता है। यह हमेशा करता है।


0

दूरी के साथ कम होने वाला नुकसान एक सरल कार्य होना चाहिए। जब आप विस्फोट बनाते हैं तो आपको विस्फोट के केंद्र के निर्देशांक को जानना चाहिए। चूंकि आप 2d में काम कर रहे हैं, यह सिर्फ x और y होगा।

आपको केवल पाइथागोरस प्रमेय का उपयोग करते हुए विस्फोट के केंद्र के निर्देशांक से खिलाड़ी (एस) की दूरी की गणना करने की आवश्यकता है, फिर अधिकतम नुकसान के प्रतिशत की गणना करने के लिए अधिकतम त्रिज्या के खिलाफ उपयोग करें।

उदाहरण के लिए, निर्देशांक (X1, y1) को अन्वेषण के केंद्र बिंदु के रूप में लें, और (x2, y2) खिलाड़ी के निर्देशांक के रूप में। फिर हम निम्न प्रकार से हुई क्षति की गणना कर सकते हैं:

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

रास्ते में चीजों के लिए, मैं जवाब के बारे में सोचने के लिए बहुत थक गया हूं, लेकिन आप मूल रूप से विस्फोट के केंद्र से खिलाड़ी के लिए लाइन के साथ चौराहों की तलाश करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.