मैं अपने पहले 'उचित' गेम प्रोजेक्ट पर शुरू कर रहा हूं, और मैंने अनिवार्य रूप से यह तय करने के लिए एक ब्लॉक मारा है कि XNA में गेम घटकों को कैसे संवाद करना चाहिए।
पिछले (जावा) जीयूआई प्रोग्रामिंग घटनाओं से, हैंडलर और श्रोता आगे बढ़ने के तरीके की तरह लग रहे थे। इसलिए मेरे पास किसी प्रकार की ईवेंट बस होगी, जो उन ईवेंट्स के लिए ईवेंट पंजीकरण और कक्षाओं को स्वीकार करती है, जिनसे निपटने के लिए हैंडलर हैं। उदाहरण के लिए (स्यूडोकोड):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
हालाँकि, मैं कोड सेटअप के बारे में निश्चित नहीं हूं (C # में) जो इसे पूरी तरह से पूरा करने के लिए आवश्यक होगा। क्या घटनाओं का ट्रैक रखता है (कुछ प्रकार की बस?), और यह कैसे संरचित है?
गेम सर्विसेज के बारे में भी बहुत कुछ बताया गया है, जिसके द्वारा आप अपने मुख्य Game.cs वर्ग में एक गेमकॉमॉप्टेंट को पंजीकृत कर सकते हैं, फिर इसे अपने कोड में कहीं से भी लाएं जिसमें मुख्य 'गेम' ऑब्जेक्ट का संदर्भ हो। मैंने अपने स्प्राइटबच ऑब्जेक्ट के साथ यह कोशिश की है और यह बहुत आसान लगता है .. हालांकि, मैं इसे इवेंट मॉडल के रूप में लचीला नहीं देख सकता।
उदाहरण के लिए ले लो जब एक दुश्मन मर जाता है। हम गेम स्कोर को अपडेट करना चाहते हैं। सेवाओं का उपयोग करके मैं गेम 1 में बनाई गई मेरी StateManager ऑब्जेक्ट का संदर्भ प्राप्त कर सकता हूं और एक सेवा के रूप में जोड़ा जा सकता हूं, फिर नए मूल्य पर 'स्कोर' सेट कर सकता हूं। मैंने सोचा था कि एक 'onEnemyDeath' घटना, जिसे कई वर्गों की भीड़ द्वारा अलग-अलग तरीके से नियंत्रित किया जा सकता है, लेकिन संबंधित 'दुश्मन की मौत का पता लगाने' अनुभाग में कोड की 1 पंक्ति द्वारा शुरू किया गया, व्यक्तिगत रूप से प्रत्येक आवश्यक GameComentent को कास्टिंग करने से बेहतर होगा जो फिर कॉल करना तरीकों की आवश्यकता है।
या ये हीन रणनीति कुछ और है?
मुझे लगता है कि यह आंशिक रूप से मेरे गरीब सी # ज्ञान के रूप में खेल संचार प्रतिमानों के रूप में ज्यादा है, लेकिन मैं वास्तव में इस मूलभूत चीज को प्राप्त करना चाहूंगा।
अपडेट करें
सेवाओं पर नज़र रखने के बारे में अधिक विस्तार से मैं कम आश्वस्त हूं - यह मूल रूप से एक वैश्विक चर के आसपास से गुजर रहा है (जो मुझे समझ में आता है)।
अपडेट २
इवेंट हैंडलिंग और नमूना कोड के परीक्षण पर इस मूल ट्यूटोरियल पर एक नज़र रखने के बाद लगता है कि मैं जो चर्चा कर रहा हूं, उसके लिए एक तार्किक विकल्प होगा। लेकिन मैंने जो सैंपल देखे हैं, उसमें इसका ज्यादा इस्तेमाल नहीं कर सकता। क्या कोई स्पष्ट कारण है कि किसी को क्यों नहीं करना चाहिए?