पर दुश्मनों के द्रव्यमान को निर्देशित करते हुए मैं एक साधारण 2 डी गेम पर काम कर रहा हूं जहां कई दुश्मन लगातार पाइथन + पायगमेम में खिलाड़ी या खिलाड़ियों का पीछा करते हैं और पीछा करते हैं। एक समस्या जिसमें मैंने भाग लिया, और इस तरह के गेम को प्रोग्राम करने वाले कई लोगों ने भाग लिया है कि दुश्मन बहुत जल्दी से अभिसरण करते हैं। मैंने इस समस्या के साथ एक अस्थायी समाधान किया है जो किसी भी दो दुश्मनों को यादृच्छिक रूप से अलग करता है यदि वे एक दूसरे के बहुत करीब हैं। यह अच्छी तरह से काम करता है लेकिन ओ (एन^2) एल्गोरिदम के बारे में है जो हर फ्रेम चलाता है और उच्च दुश्मनों पर प्रोग्राम धीमा होने लगता है।एक बार
जब मेरा प्रोग्राम इस फ़ंक्शन के साथ चलता है तो दुश्मन गोल ऑब्जेक्ट बनाने के लिए प्रतीत होते हैं जिसे मैंने "क्लंप" नाम दिया है। क्लंप आमतौर पर ग्रहण प्रतीत होता है लेकिन वास्तव में अधिक जटिल (सममित नहीं) हो सकता है क्योंकि खिलाड़ी चलता है क्योंकि दुश्मनों को विभिन्न दिशाओं में खींचा जा रहा है। मैं इस तरह के संघर्ष के तरीके की तरह करता हूं, हालांकि मैं सोच रहा हूं कि इसकी गणना करने का एक और अधिक प्रभावी तरीका है या नहीं। वर्तमान में टक्कर में हर दुश्मन (अक्सर> 100) पहले खिलाड़ी की दिशा में स्थानांतरित हो जाता है, और फिर अलग हो जाता है। अगर वहां की आकृति की गणना करने का एक तरीका था जो क्लंप बनाता है, और यह कैसे चलता है तो यह बहुत अधिक गणना को बचाएगा।
मुझे बिल्कुल यकीन नहीं है कि समस्या से कैसे संपर्क करें। यह गणना करना संभव हो सकता है कि आंकड़े की सीमा कहां चलती है, और फिर यह सुनिश्चित करने के लिए इसका विस्तार करें कि क्षेत्र वही रहता है।
इसके अलावा मेरे दो कार्य वर्तमान में ले जाने के लिए इस्तेमाल किया जा रहा दुश्मनों:
def moveEnemy(enemy, player, speed):
a = player.left-enemy.left
b = player.top-enemy.top
r = speed/math.hypot(a,b)
return enemy.move(r*a, r*b)
def clump(enemys):
for p in range(len(enemys)):
for q in range(len(enemys)-p-1):
a = enemys[p]
b = enemys[p+q+1]
if abs(a.left-b.left)+abs(a.top-b.top)<CLUMP:
xChange = (random.random()-.5)*CLUMP
yChange = ((CLUMP/2)**2-xChange**2)**.5
enemys[p] = enemys[p].move(int(xChange+.5), int(yChange + .5))
enemys[p+q+1] = enemys[p+q+1].move(-int(xChange+.5),-int(yChange+.5))
return enemys
संपादित करें: कैसे पुंज लग रहा है के कुछ स्क्रीन शॉट्स: http://imageshack.us/photo/my-images/651/elip.png/ http://imageshack.us/photo/my-images/ 832/newfni.png/
http://imageshack.us/photo/my-images/836/gamewk.png/
पुंज वर्तमान मुद्दों, ज्यादातर एक गोल वस्तु सिर्फ फैला (ग्रहण की तरह है, लेकिन कई दिशाओं में फैला हो सकता है) हो रहा है लेकिन यह आयताकार दुश्मनों के कारण सीधे किनारों की किनारों पर है।
सीमा के लिए कोड के बारे में कैसे? क्या वह दूरी की जांच कर रहा है? यह बड़ी संख्या में इकाइयों के लिए बहुत महंगा हो सकता है। –
इसके अलावा, यह हर फ्रेम को न करें बल्कि प्रत्येक एक्स फ्रेम करें। मैंने इसी समस्या को इसी तरह हल किया, हालांकि मैंने कुछ ओवरलैप की अनुमति दी। यह बड़े पैमाने पर झुंड को और अधिक खतरनाक लग रहा है! –
आपके द्वारा यहां दिए गए उत्तरों की गुणवत्ता के आधार पर, आप http://gamedev.stackexchange.com/ पर यह पूछने का प्रयास भी कर सकते हैं। –