मैं गेम डेवलपमेंट के लिए एक अनुभवी डेवलपर हूं, और मैंने एक साधारण सरल लेकिन काम करने वाला 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
और TimeState
PAUSED
हमेशा समान होना चाहिए? क्या राज्य प्रबंधन को हल करने के तरीके पर एक अच्छा डिजाइन पैटर्न या अच्छा अभ्यास है?
राज्य परिवर्तन को संभालने का एक अच्छा तरीका क्या है?
मेरे विचार या तो राज्य वस्तु उदाहरण देना है। LevelState
किसी दिए गए राज्य परिवर्तन पर निष्पादित करने के लिए कॉलबैक फ़ंक्शंस - या if level_state.changedTo() == LevelState.COMPLETED: doStuff()
जैसे प्रत्येक गेम लूप को राज्य ऑब्जेक्ट को मतदान करने के लिए। क्या इसे संभालने के बेहतर तरीके हैं? संदेश कतार/घटनाओं? मैं राज्य वस्तुओं में तर्क को एम्बेड नहीं करना चाहता हूं।
मैं भी अगर एक दोनों changedFrom
और changedTo
ईवेंट प्रबंधित करना चाहिए में रुचि हूँ, और क्या होगा अगर changedFrom
से शुरू हो रहा तर्क changedTo
तर्क शुरू हो रहा है इससे पहले कि वस्तु की स्थिति में परिवर्तन - जो जीतता है?
मैं कार्यान्वयन/भाषा विशिष्ट उत्तरों नहीं चाहता लेकिन आर्किटेक्चरल बुद्धिमान सोचने के लिए एक अच्छे तरीके से सुझाव चाहता हूं। The State Pattern
शुरू में, ऐसा लगता है इस दृष्टिकोण की तरह कुछ भूमि के ऊपर है, लेकिन के रूप में तर्क और अधिक जटिल हो जाता है आप लाभ देखेंगे:
पायथन सेट() का उपयोग करें और सेट करें, आप set.issubset(), आदि पर अपने तर्क का आधार बना सकते हैं ... मुझे विश्वास है कि आप पर्यवेक्षक पैटर्न – pyInTheSky
@pyInTheSky का उपयोग करना चाहते हैं पर्यवेक्षक पैटर्न को इंगित करने के लिए धन्यवाद! मुझे पायथन में कोड करने के कुशल तरीकों से अवगत है (हालांकि वर्तमान गेम सी # में है), लेकिन यदि आप बस एक आसान राज्य मशीन चाहते हैं, तो उदाहरण –
से उदाहरणों को और अधिक पठनीय बनाने की कोशिश की गई, मैंने इसे सक्रिय स्थिति पर पोस्ट किया: http: //code.activestate.com/recipes/577693- गतिशील- जनरेटेड-python-state-machine/ :: मैंने इसे संशोधित किया है लेकिन दोबारा पोस्ट नहीं किया है, आप इसे आसानी से एक टुपल लौटने के लिए स्विच कर सकते हैं और एक रन() फ़ंक्शन है जो कार्य करता है एक arbiter के रूप में, तो यह एक विशाल कॉल ढेर का निर्माण नहीं करता है। ऐसे कुछ अन्य तरीके भी हैं जिन्हें मैंने अपलोड नहीं किया है, जैसे कि यदि आप कोई राज्य जोड़ते हैं, तो खुद को पुन: उत्पन्न करने के लिए एसएम पूछना ... लेकिन यह बहुत आसान है और शायद आपकी मदद कर सकता है – pyInTheSky