हाल ही में मैं एक तेज-तर्रार 2 डी शूटर पर काम कर रहा हूं और मैं एक शक्तिशाली समस्या पर आया हूं। टक्कर की पहचान हुई है। ज़रूर, यह काम कर रहा है, लेकिन यह बहुत धीमा है। मेरा लक्ष्य है: स्क्रीन पर बहुत सारे दुश्मन हैं और उन्हें एक-दूसरे को नहीं छूना है। सभी दुश्मन खिलाड़ी इकाई का पीछा कर रहे हैं। उनमें से ज्यादातर की गति इतनी जल्दी होती है या बाद में वे सभी खिलाड़ी का पीछा करते हुए एक ही स्थान को समाप्त कर देते हैं। यह वास्तव में मज़ा कारक गिरा देता है, खिलाड़ी के लिए, ऐसा लगता है कि आप केवल एक दुश्मन द्वारा पीछा किया जा रहा है। उन्हें एक ही स्थान लेने के लिए रोकने के लिए मैंने एक टक्कर का पता लगाया (एक बहुत ही बुनियादी 2 डी का पता लगाने, एकमात्र तरीका जिसे मैं जानता हूं) है।
Enemy class update method
Loop through all enemies (continue; if the loop points at this object)
If enemy object intersects with this object
Push enemy object away from this enemy object
यह ठीक काम करता है। जब तक मेरे पास केवल <200 दुश्मन इकाइयाँ हैं। जब मैं 300-350 शत्रु संस्थाओं के करीब पहुँचता हूँ तो मेरी फ्रेम दर में भारी गिरावट आने लगती है। पहले मुझे लगा कि यह खराब प्रतिपादन है इसलिए मैंने उनका ड्रॉ कॉल हटा दिया। इससे मुझे बिल्कुल भी मदद नहीं मिली, मुझे एहसास हुआ कि यह अद्यतन पद्धति थी। उनकी अद्यतन पद्धति में एकमात्र भारी हिस्सा यह प्रत्येक दुश्मन-छोर-थ्रू-हर-दुश्मन भाग है। जब मैं 300 शत्रुओं के करीब पहुँचता हूँ तो खेल 90000 (300x300) कदम की पुनरावृत्ति करता है। मेरा ~
मुझे यकीन है कि इस टक्कर का पता लगाने का एक और तरीका होना चाहिए। हालांकि मुझे पता नहीं है कि कैसे। मुझे जो पृष्ठ मिलते हैं वे इस बारे में हैं कि वास्तव में दो वस्तुओं के बीच टकराव कैसे होता है या किसी वस्तु और टाइल के बीच टकराव की जांच कैसे की जाए। मैं पहले से ही उन दो चीजों को जानता हूं।
tl; डॉ? मैं संस्थाओं के बीच टकराव का पता कैसे लगा सकता हूं?
त्वरित संपादन: यदि यह किसी भी मदद के लिए है, तो मैं C # XNA का उपयोग कर रहा हूं।