एक इकाई प्रणाली के ढांचे में तिलमप?


12

मैं विशेष रूप से आर्टेमिस एंटिटी सिस्टम फ्रेमवर्क पर पढ़ रहा हूं। मैं यह तय करने की कोशिश कर रहा हूं कि क्या यह मेरे लिए सही है। मैं टाइल पर आधारित 2d पिक्सेल कला खेल पर सख्ती से काम करता हूं, और मुझे नहीं लगता कि वे कभी भी उस संसाधन के लिए गहन होंगे। मैंने हमेशा अतीत में बहुत विरासत के साथ मानक ओओपी का उपयोग किया है।

अभी एंटिटी सिस्टम फ्रेमवर्क के बारे में मेरी समझ (मुझे यकीन नहीं है कि मैं इसे पूरी तरह से समझ पाऊंगा):

  • संस्थाओं और कुछ नहीं बल्कि आईडी है
  • अवयव कुछ नहीं हैं, लेकिन डब डेटा किसी एंटिटीज़ घटक पूल में जोड़े जाते हैं
  • सिस्टम अपडेट फ़ंक्शन हैं जो सिस्टम घटक हस्ताक्षर से मेल खाने वाली प्रत्येक इकाई को संभालने के लिए दुनिया से जुड़े होते हैं

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

क्या इस ढांचे में एक तिलमिलाप बनाया जाना चाहिए? या इसे अलग से रखा जाना चाहिए ताकि एक टिलमैप संपादक के साथ इसे उत्पन्न करना आसान हो सके?

यदि इस फ्रेमवर्क में टिलमैप बनाया जाना चाहिए, तो क्या प्रत्येक टाइल एक अलग इकाई है? और तिलामप एक प्रणाली? या फिर टिलाइमैप ही एक एकल इकाई है जिसमें विरासत का निर्माण किया गया है?

यदि तिलामप फैल गया है, तो बाहरी तिलामप के खिलाफ संस्थाओं का पता लगाने का सबसे अच्छा तरीका क्या होगा?

मैं समझता हूं कि मेरे द्वारा सूचीबद्ध कई विकल्प सही हो सकते हैं, लेकिन अगर किसी ने अतीत में ऐसा किया है तो वे मेरे भ्रम पर कुछ प्रकाश डाल सकते हैं। शायद एक और विकल्प है जो मैंने नहीं सोचा है?

धन्यवाद।


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

अरे, बस बाइटे 56 के सुझाव पर गुजर रहे हैं: घटकों को वास्तव में गूंगा डेटा धारकों की आवश्यकता नहीं है। कभी-कभी यह उपयोगी होगा यदि वे वास्तव में उस डेटा को संचालित कर सकते हैं; उदाहरण के लिए वैक्टर।
जकोरा

मैं इस सुझाव को वास्तव में पसंद करता हूं। मैं डेटा से tilemap सहायकों को अलग करने, या कई घटकों / संस्थाओं में tilemap को तोड़ने के बिना इकाई ढांचे में tilemaps जोड़ सकता हूं।
स्पेन्सर मार्रा

तिलमैप सिर्फ एक अन्य घटक है, और
टिक्सेमैप

जवाबों:


8

मैंने एक इकाई घटक ढांचे (आर्टेमिस के समान) को लागू किया था, क्योंकि मैं पहले से ही थोड़ी देर के लिए विकास में रहा हूं, लेकिन मुझे नहीं लगता कि मैंने खाली स्लेट से शुरू करते हुए चीजों को अलग तरीके से किया होगा।

मेरी दुनिया इकाई ढांचे से पूरी तरह अलग है। दुनिया को किसी प्रकार की संस्था या संस्थाओं के संग्रह में बदलने के लिए यह मेरे लिए समझ में नहीं आया। मेरी दुनिया क्यूब्स के साथ 3 डी है, लेकिन मेरा मानना ​​है कि टाइल्स के लिए भी यही लागू होता है। दुनिया में एंटिटीज बाकी सब कुछ बनाती हैं, लेकिन इलाके अलग-अलग हैं। हालांकि, जब क्यूब्स को हटा दिया जाता है, तो वे स्पॉन "मटेरियल" इकाइयाँ करते हैं।

टकराव का पता लगाना भी मुश्किल नहीं है। आपकी दुनिया में isSolidAt(x,y)आपके टकराने की प्रणाली का उपयोग करने के तरीके होंगे। ईमानदारी, मैंने एक बार पहले से ही एक अलग जवाब में आज कहा है , जो कुछ भी आपके लिए सबसे अधिक समझ में आता है। आप टाइल के नक्शे को अलग करके या उसे इकाई बनाकर कोई नियम नहीं तोड़ रहे हैं। जो भी आप अपने सिर को चारों ओर लपेट सकते हैं वह सबसे अच्छा है। मेरे लिए, वह दुनिया को अलग रख रहा था और बाकी सब कुछ बना रहा था।


1
कहो मेरी नक्शा है एक इकाई। मानचित्र की isSolidAtविधि के बारे में एक और इकाई कैसे आगे बढ़ेगी ?
गेरार्डो मारसेट

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

4

मैंने इकाई के लिए एक अलग घटक के रूप में (सभी टाइलों के साथ) के रूप में तिलमप को जोड़ा और टाइल के नक्शे के लिए अलग रेंडरर भी है, इसलिए मैं इसे 3 डी या 2 डी में प्रस्तुत कर सकता हूं। संस्थाओं के रूप में सभी टाइल बनाने के लिए संभव है, लेकिन महंगा है।

ऐसा कुछ:


Entity e("map");
e.addComponent(new Tilemap("1.xml"));
e.addComponent(new TilemapRenderer2d(graphics));

tile map is something like that
class Tilemap
{
  array of tiles;
  getTileAtPosition(); 
  isWalkable ; etc;
}

class ITilemapRenderer
{}

class TilemapRenderer2d
{
draw() 
{ 
  foreach (tile in owner()->component()->tiles()) 
  {
    if (tile == ground) ground_sprite->draw() ....
  }
}

ड्राइंग को तर्क से अलग करने में लाभ MVC पैटर्न का आधार विचार है


1
संपूर्ण तिलमप एक घटक के भीतर समाहित है? क्या यह खेल पर्यावरण इकाई / मास्टर इकाई के कुछ प्रकार से जुड़ा हुआ है? मैं tilemap घटक से रेंडर-एर को अलग करके प्राप्त एक बहुत बड़ा लाभ देख सकता हूं।
स्पेन्सर मार

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