2011-04-05 27 views
8

तो मैं जावा में एक गेम लिखने की शुरुआत में हूं और मैं अपनी गेम ऑब्जेक्ट्स लिख रहा हूं। अब मैंने Evolve Your Hierarchy में पढ़ा है कि आपको अपने गेम को रचनाओं के रूप में बनाना चाहिए, न कि एक बड़े वर्ग पदानुक्रम के रूप में। जैसा कि पिछले लिंक से इस छवि को दिखाता है:जावा में ठोस शुद्ध एकत्रीकरण (रचना) गेम ऑब्जेक्ट्स कैसे लिखें?

enter image description here

हालांकि, जब वास्तव में कार्यान्वयन के लिए नीचे हो रही मैं कहाँ इंटरफेस को लागू करने के बारे में एक छोटा सा सवाल है।

आइए कहें कि आपके पास प्लेयर और इंटरफेस मूवबल और रेंडरबल नामक एक वर्ग है।

class Player { 
    public Moveable moveable; 
    public Renderable renderable; 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

class PlayerRenderable implements Renderable { 
    // Function implementations 
} 

या आप कोशिश करते हैं और इंटरफेस वस्तु को सीधे लागू करके इस करते हैं: आप इस सार्वजनिक इंटरफ़ेस वैरिएबल का उपयोग कर लागू करें

class Player implements Moveable, Renderable { 
    private GenericMoveable genericMoveable; 

    // Non-direct Implementation of Moveable 
    void someMoveFunc(double x, double y) { 
     genericMoveable.someMoveFunc(x, y); 
    } 

    // Direct implementation of Renderable 
    void someRenderableFunction() { 
     // Player class specific code 
    } 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

अब वर्तमान में मैं महसूस कर रहा हूँ कि दूसरी विधि बेहतर है । इसका मुख्य कारण यह है कि मैं निम्नलिखित सूचियां बना सकता हूं:

List<Renderable> renderObjects; // use this to draw all of the objects to the screen 
List<Moveable> moveObjects; // use this to move all objects at once 

मैं वास्तव में केवल पुष्टि चाहता हूं कि मैं सही रास्ते पर हूं। मुझे पूरा यकीन है कि जावा में गेम के लिए गेम ऑब्जेक्ट्स बनाते समय आप सीधे गेम ऑब्जेक्ट में इंटरफेस को लागू करना चाहते हैं और फिर निजी इंटरफेस का उपयोग करना चाहते हैं यदि आपको उनकी ज़रूरत है और बाकी के लिए उन कार्यों के प्रत्यक्ष कार्यान्वयन। क्या ये सही है? और मैं क्या कर रहा हूं इसके सकारात्मक और नकारात्मक क्या हैं?

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

+0

दूसरे उदाहरण एक बहुत अच्छे लगता है क्योंकि आप से सूचियों करने में समर्थ हैं मूवबल और रेंडरेबल इंटरफेस। हालांकि, मेरे पास कई वर्ग हैं जो मूवबल को लागू करते हैं और मुझे लगता है कि मैं genericMoveable.someMoveFunc (x, y) को डुप्लिकेट करता हूं। ; उन सभी में - क्या आप इस समस्या में भाग गए थे? – sdasdadas

+0

@ सदादादास असल में मैं इस पर एक नज़र डालने की सिफारिश करता हूं: http://gamadu.com/artemis/ –

उत्तर

2

यह एक दिलचस्प लिंक है। मैं इकट्ठा करता हूं कि आपके Player वर्ग के लिए आपके मन में क्या है, वह लेख एक घटक कंटेनर कहता है। इसके लिए, कक्षा में इंटरफेस लगाने के लिए मुझे जाने के तरीके की तरह लगता है। ऐसा नहीं है कि एक शुद्ध एकत्रीकरण संरचना पर ले जाएगा (जहां नहीं रह गया है एक Player वर्ग से प्रति आपके सिस्टम में केवल मार्ग है।

वैसे, संरचना आप प्रस्तावित नहीं किए हों मूल रूप से एक आवेदन पत्र है delegation design pattern। एक Player सभी आंदोलन संचालन एक Movement वस्तु के प्रतिनिधियों निर्भर करता है और यह परवाह नहीं करता क्या Movement वस्तु के विशेष प्रकार इसके साथ काम करना पड़ता है।

+0

मुझे वास्तव में स्मृति में अधिक डिज़ाइन पैटर्न देना चाहिए ताकि मैं अपने विचारों को बेहतर तरीके से समझा सकूं। "यह एकमात्र रास्ता है जो आपको शुद्ध एकत्रीकरण संरचना में ले जाएगा" तो क्या इसका मतलब यह है कि संरचना वर्तमान में शुद्ध एकत्रीकरण का मतलब नहीं है? –

+0

उस लिंक से मुझे क्या समझ आया। वह लिखते हैं, "... प्रत्येक गेम इकाई में घटकों का संग्रह शामिल होता है। इस तरह कोई 'गेम इकाई ऑब्जेक्ट' नहीं होता है।" मैं उसे बिल्कुल समझने के लिए लेता हूं: शुद्ध एकत्रीकरण वास्तुकला में बिल्कुल 'प्लेयर' कक्षा नहीं होगी। यह काफी चरम रिफैक्टरिंग है और मुझे यह पता चला कि उसने यात्रा के लिए बिल्कुल दर्द रहित नहीं था। पार्टवे जा रहे हैं (जैसे आप कर रहे हैं) मेरे लिए बहुत अधिक उचित लगता है। –

4

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

+2

ठीक है अगर आपने इसे जंगली में देखा है तो इससे मुझे और अधिक विश्वास दिलाता है कि यह पथ कम से कम दूसरों के लिए पर्याप्त काम करता है उपयोग। –

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