कैसे एक ध्वनि जोड़ने के लिए कि एक दुश्मन ऐ सुन सकता है?


10

दिया हुआ:

  • एक 2 डी शीर्ष नीचे खेल
  • टाइलें सिर्फ एक 2 डी सरणी में संग्रहीत की जाती हैं
  • प्रत्येक टाइल में एक संपत्ति होती है - नम (इसलिए ईंटें -50 डीबी हो सकती हैं, हवा -1 हो सकती है)

इससे मैं इसे जोड़ना चाहता हूं इसलिए बिंदु X1, y1 पर एक ध्वनि उत्पन्न होती है और यह "बाहर निकलता है"। नीचे दी गई छवि इसे बेहतर बताती है। स्पष्ट रूप से अंतिम लक्ष्य यह है कि एआई दुश्मन ध्वनि को "सुन" सकता है - लेकिन अगर कोई दीवार इसे रोक रही है, तो ध्वनि दूर तक नहीं जाती है।

यहाँ छवि विवरण दर्ज करें

लाल दीवार है, जिस पर 50db का खंभा है।

मुझे लगता है कि तीसरे गेम टिक में मैं अपने गणित को भ्रमित कर रहा हूं।

इसे लागू करने का सबसे अच्छा तरीका क्या होगा?


1
क्या आप ध्वनि को प्रतिबिंबित करने / पुन: उत्पन्न करने की परवाह करते हैं? यही है, अगर साउंडप्रूफ दीवार का एक खंड सीधे ध्वनि स्रोत और एआई एजेंट के बीच होता है, लेकिन दीवार को स्वतंत्र रूप से चारों ओर चलाया जा सकता है, तो क्या एआई एजेंट को अभी भी ध्वनि सुनना चाहिए? यदि उत्तर नहीं है, तो केवल प्रत्येक सेल को प्रति ध्वनि एक बार अपडेट करें, इसलिए प्रत्येक ध्वनि स्रोत पर केवल एक बार भीगने पर लागू होता है। यदि आपके पास केवल कुछ AI एजेंट हैं, तो स्रोत से एजेंट तक एक लाइन का पता लगाएं।
सीन मिडिलडच

लक्ष्य कई 'बेवकूफ' एजेंटों की दीवारों के चारों ओर आपकी आवाज़ के बाद है और क्या नहीं।
क्रिस

जवाबों:


7

यह एक उचित विचार की तरह लगता है, हालांकि याद रखें, यह एक गेमप्ले सुविधा है, इसे गेमप्ले के लिए आवश्यक से अधिक जटिल न बनाएं।

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

यह अनिवार्य रूप से एक पाथफाइंग समस्या है, और यह शायद दिज्क्स्ट्रा के एल्गोरिथ्म का उपयोग करके सबसे अच्छा हल है। यह एक से कई बिंदु खोज (एक ध्वनि स्रोत, एक से अधिक दुश्मन) है, और एक बिंदु पर शुरू करके कुशलतापूर्वक हल किया जा सकता है।

आप स्रोत से प्रसार करके शुरू करते हैं, और उन सभी पड़ोसियों को चिह्नित करते हैं जिन्हें अभी तक चिह्नित नहीं किया गया है और 0 से ऊपर की गणना की गई मात्रा है, उन पड़ोसियों में से प्रत्येक जिन्हें आप सूची में जोड़ते हैं। उस सूची को गणना की गई मात्रा द्वारा क्रमबद्ध किया जाना चाहिए। फिर आप सूची में उच्चतम वॉल्यूम प्रविष्टि के लिए प्रक्रिया को दोहराते हैं, आवश्यक के रूप में सूची में नई प्रविष्टियां जोड़ते हैं, और जिसे आपने संभाला है उसे हटाते हैं। सूची खाली होने तक दोहराएं।

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


1
तत्काल ध्वनि यात्रा के लिए +1। जब तक आप एक भौतिकी सिमुलेशन जो कि सामान, KISS परवाह कर रहे हैं।
Hackworth

हम्मम वास्तव में बहुत अच्छा लगता है। मैं इसे सरल रखने के बारे में @Hackworth से भी सहमत हूं। तत्काल ध्वनि इस तरह के एक 'पैसा गिरा दिया गया था' पल यह उल्लेख किया गया था। मैंने दीजकस्ट्रा के एल्गोरिदम के बारे में पढ़ना शुरू कर दिया है, लेकिन सिर्फ पुष्टि करने के लिए, इसमें विभिन्न प्रकार की दीवारों के लिए समायोजित करने के लिए भारित नोड्स शामिल हो सकते हैं?
क्रिस

@ क्रिस हाँ, डेजकस्ट्रा भी भारित नोड्स के साथ काम करता है जो दीवारों को मॉडल करने के लिए एक अच्छा तरीका होगा (उदाहरण के लिए, वजन कम हो जाएगा आदि)
bummzack

9

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


मैं इस जवाब से सहमत हूं।
बोबोबोबो

ध्वनि को संग्रहीत करने के लिए डेटा संरचना इस तरह से बहुत सरल होगी।
क्रिस

मुझे एक किरण डाली का विचार पसंद है, लेकिन मुझे नहीं पता कि क्या यह विभिन्न प्रकार की दीवारों से गुजरने वाली ध्वनि के लिए होगा। उदाहरण के लिए, एक छोटा पैर की आवाज़ दीवार से नहीं गुज़रेगी, लेकिन बंदूक से गोली चलने की आवाज़ होगी। लेकिन इस मामले में मुझे नहीं पता कि क्या किरण कास्टिंग उन स्थितियों
क्रिस

1
क्रिस, बस रायकास्ट विचार लें और उस पर थोड़ा विस्तार करें। हर बार जब किरण किसी वस्तु को काटती है, तो वह कुछ मात्रा से ध्वनि की मात्रा को कम कर देती है। यदि एआई तक पहुंचने से पहले वॉल्यूम शून्य से कम हो जाता है, तो यह सुना नहीं जाता है। यदि यह एआई तक पहुंचता है, तो आपके पास हाथ में "वॉल्यूम" मूल्य है। दूरी पर ध्वनि ड्रॉपऑफ़ लागू करने के लिए आप इस तरह के "रे ट्रेस इन वॉल्यूम में कमी" का भी उपयोग कर सकते हैं।
टिम होल्ट

@Tim होल्ट - अच्छा बिंदु, मैं उन पंक्तियों के साथ सोच नहीं किया गया था
क्रिस

0

मुझे लगता है कि आपके कार्यान्वयन का मानना ​​है कि एक सेल में ध्वनि का स्तर संचयी है, और यह कि आयाम सभी दिशाओं में समान रूप से बाहर की ओर बढ़ता है। ध्वनि बाहर नहीं फैलती है, फ्रेम द्वारा फ़्रेम, यह या तो खेल रहा है या यह नहीं है, और आप इसे किसी भी बिंदु पर खेलने के लिए आयाम का पता लगाना चाहते हैं।

टाइल्स के माध्यम से रेकास्टिंग करना एक तरीका है (और शायद सबसे प्रभावी तरीका) इसे करने का। बस emitter और रिसीवर के बीच एक रेखा खींचना, और रास्ते में प्रत्येक सेल के नम मूल्य को घटाना। यदि संख्या सकारात्मक है, तो आप ध्वनि बजाते हैं।

यदि आप अप्रत्यक्ष ध्वनि का मॉडल बनाना चाहते हैं, तो आपको पथ-खोज करना होगा। अपने पेड़ की जड़ के रूप में उत्सर्जक का इलाज करें, और प्रत्येक आसन्न सेल को एक लिंक नोड के रूप में मॉडल करें। प्रत्येक लिंक की एक लागत होती है, जिसे वर्तमान वॉल्यूम से घटाया जाता है। ग्राफ़ के माध्यम से ट्रैवर्सिंग करते रहें, जब तक कि आपको रिसीवर या आपकी वॉल्यूम शून्य से नीचे न मिल जाए (यदि यह करता है, पीछे हट जाता है और दूसरा रास्ता आज़माता है)। यदि पॉजिटिव वॉल्यूम वाले रिसीवर के लिए कोई रास्ता नहीं है, तो आपका एमिटर नहीं सुना जा सकता है। NB: जब आप रिसीवर ढूंढते हैं तो आप केवल ट्रैवर्सिंग नहीं छोड़ सकते हैं, क्योंकि एमिटर से रिसीवर तक कई रास्ते हो सकते हैं, और आपको सबसे अधिक वॉल्यूम की आवश्यकता होती है।

यदि आप एआई को मॉडलिंग कर रहे हैं तो इस बात की परवाह करें कि ध्वनि कहां से आई है, बाद वाला तरीका मदद करेगा - एआई मार्ग में अंतिम खंड की दिशा से आने वाली ध्वनि को 'सुनवाई' करेगा। अच्छी तरह से, अगर रिसीवर के लिए दो श्रव्य मार्ग हैं, तो वे एआई को कई ध्वनियों और किस दिशा में ले जाने के बारे में भ्रमित हो सकते हैं।


1
ध्वनि है एक लहर तरल पदार्थ के माध्यम से प्रेषित। यह एक खेल में उस तरह से अनुकरण करने के लिए उपयुक्त नहीं हो सकता है, लेकिन यह निश्चित रूप से "नहीं है जिस तरह से ध्वनि काम करता है"।
केविन रीड

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