2012-04-12 11 views
5

मैं जावास्क्रिप्ट में एक टावर रक्षा खेल बनाने की कोशिश कर रहा हूं। जो एक द्विआधारी ढेर (जो मेरा मानना ​​है कि काफी इष्टतम है)मास अस्थिर पथदर्शी

समस्या मैं

का उपयोग करता http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript:

यह सब pathfinding से अच्छी तरह से अलग हो रहा है ..

मैं इस वेबसाइट से astar कोड का उपयोग कर रहा मैं हूं कि मैं लोगों को "हमलावरों" के मार्ग को अवरुद्ध करने की अनुमति देना चाहता हूं। इसका मतलब है कि प्रत्येक "हमलावर" को अपने आप से बाहर निकलने का रास्ता ढूंढने में सक्षम होना चाहिए (क्योंकि कोई भी एक "हमलावर" को काट सकता है और उसे बाहर निकलने का अपना रास्ता ढूंढना होगा)। अब 5/6 हमलावर बिना किसी मुद्दे के किसी भी समय पथदर्शी कर सकते हैं। लेकिन कहें कि पथ 10+ हमलावरों के लिए अवरुद्ध है, उनमें से सभी को एक ही समय में अपनी पथदर्शी लिपि को आग लगाना होगा जो केवल एफपीएस को लगभग 1/2 प्रति सेकंड तक छोड़ देता है।

यह किसी भी व्यक्ति के लिए एक आम समस्या होनी चाहिए जिसकी कई संस्थाएं किसी भी समय पथदर्शी हो रही हैं, इसलिए मुझे लगता है कि मेरे दृष्टिकोण से बेहतर तरीका होना चाहिए।

तो मेरा सवाल यह है कि: सबसे प्रभावी तरीके से कई "बॉट्स" पर द्रव्यमान पथदर्शी एल्गोरिदम लागू करने का सबसे अच्छा तरीका क्या है।

धन्यवाद,

जेम्स

+1

ऐसा नहीं है कि कोड में 'findGraphNode' की तरह दिखता है, रैखिक-समय लगता है, जबकि यह लगातार समय (हैश तालिका के साथ ले रही किया जाना चाहिए), ताकि कार्यान्वयन इष्टतम से दूर है। –

+0

मैं देखता हूं कि मैं इसे थोड़ा तेज कर सकता हूं या नहीं। लेकिन मुझे लगता है कि यहां तक ​​कि अधिक कुशल पथ खोज के साथ भी मैं धीमी फ्रेमरेट्स के साथ समाप्त हो जाऊंगा यदि मैं बॉट्स को आजमाता हूं और पथदर्शी करता हूं .. मुझे लगता है कि मेरी सर्वश्रेष्ठ शर्त वास्तव में प्रति फ्रेम एक बार पूरे नक्शे को पथदर्शी कर रही है और फिर दिशा निर्धारित कर रही है बॉट्स के लिए प्रत्येक पासने योग्य ब्लॉक पर .. – james

+1

@james अगर यह सबसे अधिक टावर रक्षा की तरह कुछ है, मोटे तौर पर एक स्क्रीन के लायक मानचित्र और कोई जटिल कॉलिसन नहीं है (यानी बॉट एक-दूसरे या अन्य चलती वस्तुओं के साथ टकराव नहीं करते हैं, या आप इसे अलग से संभालते हैं) तो हां, मुझे लगता है कि पूरे मानचित्र के लिए पथों की गणना करना सबसे अच्छा होगा।वास्तव में, आपको शायद हर फ्रेम के पूरे मानचित्र को फिर से समझना नहीं चाहिए। यदि आप एल्गोरिदम बनाने में सावधान हैं, तो आप यह निर्धारित करने में सक्षम होना चाहिए कि उपयोगकर्ता परिवर्तन से कौन से नोड प्रभावित होते हैं, और उन नोड्स से केवल 'अपस्ट्रीम' का पुनर्मूल्यांकन करते हैं। दिलचस्प लगता है! – Tim

उत्तर

2

उपयोग विरोधी वस्तुओं, इस सस्ते pathfinding प्राप्त करने के लिए एक ही रास्ता, afaik है: http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

विरोधी वस्तु मूल रूप से मतलब है कि बॉट के बजाय होने व्यक्तिगत एआई, आपके पास एक "स्वर्ग एआई" होगा, जो आपके गेम मैप से जुड़ा हुआ है।


पी.एस .: यहाँ सामान्य रूप में pathfinding के बारे में एक और लिंक (संभवतः सबसे अच्छा ऑनलाइन संदर्भ उपलब्ध है) है: http://theory.stanford.edu/~amitp/GameProgramming/index.html

+0

धन्यवाद, मैं थोड़ी देर बाद एक नज़र डालेगा। यद्यपि आपने जो कहा है उससे ही ऐसा लगता है कि यह पूरे मानचित्र को पथदर्शी करने के लिए और अधिक समझ में आता है और संभवतः प्रत्येक "ब्लॉक" पर एक दिशा निर्धारित करता है जो बॉट्स का पालन करता है .. हमम – james

0

बस परिणाम कैश।

पथ को हैश तालिका (ऑब्जेक्ट) में मान के रूप में स्टोर करें, प्रत्येक नोड को यूयूआईडी दें, यूयूआईडी को एक अद्वितीय हैश टेबल कुंजी बनाने के लिए संयोजित करें और इसमें पथ डालें।

जब आप हैश तालिका से बाहर वापस पथ को पुनः प्राप्त, पथ चलना, और देखें कि क्या वह अभी भी मान्य है, अगर नहीं, पुनर्गणना और नया एक में वापस डालें।

कई अनुकूलन कर रहे हैं कि आप कर सकते हैं ऐसा :)

तरह c69 झुंड ऐ या छत्ता मन मन के लिए आते हैं ने कहा: पी

संबंधित मुद्दे