मैं अपने गेम इंजन में स्क्रिप्टिंग को लागू करने के तरीके से जूझ रहा हूं। मेरे पास केवल कुछ आवश्यकताएं हैं: यह सहज होना चाहिए, मैं एक कस्टम भाषा, पार्सर और दुभाषिया लिखना नहीं चाहता हूं, और मैं थ्रेडिंग का उपयोग नहीं करना चाहता हूं। (मुझे यकीन है कि एक सरल समाधान है; मुझे कई गेम लॉजिक थ्रेड्स की परेशानी की आवश्यकता नहीं है।) यहाँ एक उदाहरण स्क्रिप्ट है, पायथन (उर्फ स्यूडोकोड) में:
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
कहानी कहने का वह महाकाव्य टुकड़ा कार्यान्वयन की समस्याएँ खड़ी करता है। मैं सिर्फ एक बार में पूरी विधि का मूल्यांकन नहीं कर सकता, क्योंकि walk_to
खेल का समय लगता है। यदि यह तुरंत वापस आ जाता है, तो ऐलिस बॉब के पास चलना शुरू कर देगा, और (उसी फ्रेम में) नमस्ते कहेगा (या अभिवादन किया जाएगा)। लेकिन अगर walk_to
वह एक अवरुद्ध कॉल है जो बॉब तक पहुंचने पर वापस लौटता है, तो मेरा गेम अटक जाता है, क्योंकि यह निष्पादन के उसी धागे को अवरुद्ध कर रहा है जो ऐलिस चलना होगा।
मैंने माना कि प्रत्येक फंक्शन को एक एक्शन बनाना है - alice.walk_to(bob)
एक ऑब्जेक्ट को एक कतार पर धकेला जाएगा, जो ऐलिस बॉब के पहुंचने के बाद, जहां भी वह था, पॉपअप हो जाएगा। यह अधिक सूक्ष्म रूप से टूट गया है: if
शाखा का तुरंत मूल्यांकन किया जाता है, इसलिए बॉब ऐलिस को बधाई दे सकता है, भले ही उसकी पीठ उसकी ओर हो।
थ्रेड बनाने के बिना अन्य इंजन / लोग स्क्रिप्टिंग को कैसे संभालते हैं? मैं गैर-गेम-देव क्षेत्रों में देखना शुरू कर रहा हूं, जैसे कि jQuery एनीमेशन चेन, विचारों के लिए। ऐसा लगता है कि इस तरह की समस्या के लिए कुछ अच्छे पैटर्न होने चाहिए।