8

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

खेल विकास में राज्य को संभालने का एक अच्छा तरीका क्या है?
एक बहुत अनुभवहीन दृष्टिकोण जैसे कई बूलियन्स है:

time_stopped = True 
time_slow_motion = False 
level_loaded = True 
level_paused = True 
level_completed = False 

यह बहुत अनम्य है के बाद से एक डेवलपर त्रुटि एक ही समय में time_stopped = True और time_slow_motion = True का कारण बन सकता है, जो खेल तर्क को नष्ट कर देगी।

मैं एक बेहतर दृष्टिकोण के लिए देख रहा हूँ की दिशा में:

class TimeState: 
    STOPPED = 0 
    SLOW_MOTION = 1 
    NORMAL = 2 
    current_state = 0 

    def isStopped(self): 
     if current_state == self.STOPPED: return True 

लेकिन यह कैसे मैं एक अच्छा तरीका में राज्य के कई समूहों को संभाल होगा? मैं LevelState बना सकता था जिसमें LOADED, PAUSED और COMPLETED राज्य थे। लेकिन मैं ओवरलैपिंग समूहों को कैसे संभाल सकता हूं जैसे LevelState और TimeStatePAUSED हमेशा समान होना चाहिए? क्या राज्य प्रबंधन को हल करने के तरीके पर एक अच्छा डिजाइन पैटर्न या अच्छा अभ्यास है?

राज्य परिवर्तन को संभालने का एक अच्छा तरीका क्या है?
मेरे विचार या तो राज्य वस्तु उदाहरण देना है। LevelState किसी दिए गए राज्य परिवर्तन पर निष्पादित करने के लिए कॉलबैक फ़ंक्शंस - या if level_state.changedTo() == LevelState.COMPLETED: doStuff() जैसे प्रत्येक गेम लूप को राज्य ऑब्जेक्ट को मतदान करने के लिए। क्या इसे संभालने के बेहतर तरीके हैं? संदेश कतार/घटनाओं? मैं राज्य वस्तुओं में तर्क को एम्बेड नहीं करना चाहता हूं।
मैं भी अगर एक दोनों changedFrom और changedTo ईवेंट प्रबंधित करना चाहिए में रुचि हूँ, और क्या होगा अगर changedFrom से शुरू हो रहा तर्क changedTo तर्क शुरू हो रहा है इससे पहले कि वस्तु की स्थिति में परिवर्तन - जो जीतता है?

मैं कार्यान्वयन/भाषा विशिष्ट उत्तरों नहीं चाहता लेकिन आर्किटेक्चरल बुद्धिमान सोचने के लिए एक अच्छे तरीके से सुझाव चाहता हूं। The State Pattern

शुरू में, ऐसा लगता है इस दृष्टिकोण की तरह कुछ भूमि के ऊपर है, लेकिन के रूप में तर्क और अधिक जटिल हो जाता है आप लाभ देखेंगे:

+0

पायथन सेट() का उपयोग करें और सेट करें, आप set.issubset(), आदि पर अपने तर्क का आधार बना सकते हैं ... मुझे विश्वास है कि आप पर्यवेक्षक पैटर्न – pyInTheSky

+0

@pyInTheSky का उपयोग करना चाहते हैं पर्यवेक्षक पैटर्न को इंगित करने के लिए धन्यवाद! मुझे पायथन में कोड करने के कुशल तरीकों से अवगत है (हालांकि वर्तमान गेम सी # में है), लेकिन यदि आप बस एक आसान राज्य मशीन चाहते हैं, तो उदाहरण –

+2

से उदाहरणों को और अधिक पठनीय बनाने की कोशिश की गई, मैंने इसे सक्रिय स्थिति पर पोस्ट किया: http: //code.activestate.com/recipes/577693- गतिशील- जनरेटेड-python-state-machine/ :: मैंने इसे संशोधित किया है लेकिन दोबारा पोस्ट नहीं किया है, आप इसे आसानी से एक टुपल लौटने के लिए स्विच कर सकते हैं और एक रन() फ़ंक्शन है जो कार्य करता है एक arbiter के रूप में, तो यह एक विशाल कॉल ढेर का निर्माण नहीं करता है। ऐसे कुछ अन्य तरीके भी हैं जिन्हें मैंने अपलोड नहीं किया है, जैसे कि यदि आप कोई राज्य जोड़ते हैं, तो खुद को पुन: उत्पन्न करने के लिए एसएम पूछना ... लेकिन यह बहुत आसान है और शायद आपकी मदद कर सकता है – pyInTheSky

उत्तर

2

इस तरह के एक आम बात भी एक पैटर्न है कि वहाँ है।

+0

राज्य पैटर्न को इंगित करने के लिए धन्यवाद।बेशक मैंने इसे Google के माध्यम से पाया लेकिन मैं सोच रहा हूं कि इसमें भिन्नताएं/विस्तार हैं जो खेल के विकास से बेहतर हैं (क्योंकि यह बहुत सामान्य/सरल है)। मुझे यह भी रूचि है कि मैं राज्य के परिवर्तन और राज्य समूहों को ओवरलैप करने में कैसे संभाल सकता हूं। –

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