विश्व-से-खिलाड़ी इन्वेंट्री सिस्टम कैसे बनाएं?


11

मैं XNA के भीतर एक इन्वेंट्री सिस्टम को लागू करने की कोशिश करने के मुद्दे पर चल रहा हूं (वास्तव में कोई फर्क नहीं पड़ता, कोई भी मंच हो सकता है) लेकिन अभी तक। इस मुद्दे को मैं अपने सिर के चारों ओर लपेटने की कोशिश कर रहा हूं:

मैं दुनिया से एक आइटम कैसे प्राप्त कर सकता हूं (सोचिए जब आप एक राक्षस को मारते हैं तो यह कवच को गिराता है) और इसे मेरे खिलाड़ी की सूची में प्राप्त करें?

अगर कोई इन्वेंट्री सिर्फ वस्तुओं की एक सूची है, तो तकनीकी रूप से, मैं अपने खिलाड़ी की इन्वेंट्री में दुनिया से स्टील तलवार कैसे प्राप्त कर सकता हूं, क्योंकि एक वर्ग एक से अधिक चीजें नहीं करता है?

मेरे पास वर्तमान में एक आइटम संरचना है, जिसमें एक अद्वितीय हेक्स मूल्य, कितने आइटम हैं (स्टैकबल्स के लिए, तीर की तरह) और इन्वेंट्री के भीतर प्रतिपादन के लिए एक बनावट, और कुछ अन्य महत्वहीन गुण (नाम, विवरण, आदि) की एक गिनती है ।

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

किसी भी विचार के लिए धन्यवाद!


4
क्या आपके पास बस नहीं है WorldItemजो आपके लिए अलग है InventoryItem? (हो सकता है WorldItemकि एक InventoryItemटेम्पलेट है जिसे उठाया जाने पर खिलाड़ी की सूची में डाल दिया जाता है)।
जॉर्ज डकेट

1
@GeorgeDuckett आपको इसका उत्तर देना चाहिए .. इसमें शायद कुछ विधि होनी चाहिए Inventoryजो WorldItemइसे लेती है और इसे जोड़ती है InventoryItem। ताकि यह उन मामलों को भी संभाल सके जहां वस्तुओं को स्टैक करने की आवश्यकता होती है (जैसे। तीर)।
बंमज़ैक

@ बंबजैक: हो गया।
जॉर्ज डकेट

जवाबों:


17

मैं जिस दृष्टिकोण के लिए जाऊंगा उसमें 2 अलग-अलग संरचनाएं (या कक्षाएं) हैं। WorldItemऔर InventoryItem

इसके बाद आप InventoryItemअपने प्रॉपर्टी / फ़ील्ड के रूप में जोड़ सकते हैं, WorldItemजो कि उस खिलाड़ी की इन्वेंट्री में रखा जाता है जब दुनिया का सामान उठाया जाता है।

आप कहीं पर एक विधि चाहते हैं (खिलाड़ी वर्ग पर, या तो आइटम वर्ग) जो आइटम की तरह स्टैकिंग से निपटने के लिए खिलाड़ी की इन्वेंट्री में इन्वेंट्री आइटम जोड़ने का काम करता है।


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

अगर इसे 2 तरह से करने की आवश्यकता है, तो मुझे एक अलग 'लुकअप' क्लास के लिए लुभाया जाएगा, जिसमें विश्व आइटम और इन्वेंट्री आइटम के जोड़े संग्रहीत हों। फिर आप एक को देखने के लिए उपयोग करेंगे, दूसरे को देखते हुए।
जॉर्ज डकेट

ओह्ह अच्छा, ऐसा कभी नहीं सोचा था। यह एक बहुत ही दिलचस्प विचार है। चूंकि सभी आइटम ठोस हैं, इसलिए यह उनके लिए एक खोज होने का अर्थ है।
रोस

2
जब यह उठाया जाता है तो मैं वर्ल्ड इटेम को नष्ट कर देता हूं और आइटम गिराए जाने पर एक नया निर्माण करता हूं।
साइमन रिक्टर

माना। अन्यथा का मतलब नहीं था।
जॉर्ज डकेट

0

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

अपने गेम के ड्रा लूप में आप एक लूप बना सकते हैं जो वर्ल्डटाइम्स सूची में सभी आइटम को स्क्रीन पर खींचता है, लेकिन निश्चित रूप से खिलाड़ी ऑब्जेक्ट पर इन्वेंट्री सूची को अनदेखा करता है।


मेरा वर्तमान तरीका अभी यह है कि मेरे पास एक WorldItem वर्ग है जो एक InventoryItem को एन्क्रिप्ट करता है, दोनों एक ही आइटम से संबंधित हैं। गेम की अपडेट विधि में मैं सभी विश्व वस्तुओं और खिलाड़ी के साथ टकराव की सीमाओं का परीक्षण करता हूं। यदि दो टकराते हैं, तो WorldItem को WorldItem सूची से हटा दिया जाता है और इसे खिलाड़ी की सूची में डाल दिया जाता है (जो सूची की है <InventoryItem की)
Ross
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.