2 डी टाइल-आधारित गेम में, एनपीसी और टाइल्स को एक-दूसरे का संदर्भ कैसे देना चाहिए?


9

मैं टॉप-डाउन 2D गेम्स के लिए एक टाइल इंजन बना रहा हूं। मूल रूप से दुनिया टाइल्स की एक ग्रिड से बना है।

अब मैं उदाहरण के लिए एनपीसी लगाना चाहता हूं जो मानचित्र पर आगे बढ़ सकता है।

आपको सबसे अच्छा क्या लगता है:

  1. प्रत्येक टाइल में NPC के लिए एक संकेतक है जो उसके टाइल पर है, या NULL सूचक है
  2. एनपीसी की एक सूची है, और उनके पास उस टाइल के निर्देशांक हैं जो वे हैं।
  3. कुछ और?

मुझे लगता है

  1. टक्कर का पता लगाने के लिए तेज है, लेकिन यह बहुत अधिक मेमोरी स्पेस का उपयोग करेगा और यह सभी एनपीसी को एक मानचित्र में खोजने के लिए धीमा है।
  2. विपरीत है।

जवाबों:


11

क्यों न दोनों? कई बार जब आप यह देखना चाहते हैं कि क्या किसी विशिष्ट टाइल पर कोई NPC है (जैसे टकराव का पता लगाने के लिए, जैसा कि आपने उल्लेख किया है), और दूसरी बार जब आप दुनिया के सभी NPC पर पुनरावृति करना चाहेंगे ( जैसे कि उनके एआई तरीकों को हर फ्रेम में चलाने के लिए)।

जब तक आप मेमोरी-विवश प्लेटफ़ॉर्म पर काम नहीं कर रहे हों या आपके पास वास्तव में बहुत बड़ा नक्शा हो, तब तक प्रति टाइल एक पॉइंटर इतनी मेमोरी नहीं है ।


5
+1 मैं इस बात से सहमत हूं, हालांकि @lezebulon, मेरा सुझाव है कि आप किसी भी तर्क को एनकैप्सुलेट करते हैं जिसे दोनों को एक साथ अपडेट करने की आवश्यकता है, जितनी जल्दी हो सके। यही है, जब कोई खिलाड़ी एक टाइल छोड़ता है, तो एक ही समय में दोनों पॉइंटर्स, प्लेयर-टू-टाइल और टाइल-टू-प्लेयर को हटाने के लिए एक परमाणु ऑपरेशन (फ़ंक्शन कॉल) होना चाहिए। और जब कोई खिलाड़ी टाइल पर आता है, तो दो सूचक कार्य एक साथ करते हैं। यह आपको कुछ संभावित अराजकता से बचाएगा जहां संदर्भ एक दूसरे से सहमत नहीं होते हैं, अर्थात एक मौजूद है जबकि दूसरा नहीं करता है।
इंजीनियर

0

आप नक्शे के साथ टकराव को कैसे संभालते हैं? यदि आपके पास टक्कर की परत है, तो एक बहुत ही आसान तरीका होगा कि पहले NPCs की एक सूची बनाएं जिसमें निर्देशांक हों कि वे किस टाइल पर हैं और फिर उस सूची के माध्यम से पुनरावृत्ति कर रहे हैं और टकराव की टाइल के रूप में NPC के तहत टकराव परत टाइल को चिह्नित कर रहे हैं। इस तरह, एनपीसी के खिलाफ टकराव को बाकी के नक्शे के समान ही नियंत्रित किया जाएगा। यह निश्चित रूप से, अगर NPCs स्थानांतरित नहीं होते हैं ...

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