मैं उसी चीज पर काम कर रहा हूं। अतिरिक्त चिंता यह है कि OpenGL (और मेरी जानकारी के लिए, OpenAL), और कई अन्य हार्डवेयर इंटरफेस, प्रभावी रूप से राज्य मशीनें हैं जो कई थ्रेड्स द्वारा कॉल किए जाने के साथ-साथ नहीं मिलती हैं। मुझे नहीं लगता कि उनका व्यवहार भी परिभाषित किया गया है, और LWJGL (संभवतः JOGL) के लिए भी यह अक्सर एक अपवाद फेंकता है।
मैंने जो किया, वह थ्रेड का एक क्रम बना रहा था जो एक विशिष्ट इंटरफ़ेस को लागू करता था, और उन्हें एक नियंत्रण ऑब्जेक्ट के स्टैक पर लोड करता था। जब उस ऑब्जेक्ट को गेम को बंद करने के लिए एक संकेत मिला, तो यह प्रत्येक थ्रेड के माध्यम से चलेगा, एक कार्यान्वित ceaseOperations () विधि को कॉल करेगा, और खुद को बंद करने से पहले उनके बंद होने की प्रतीक्षा करेगा। यूनिवर्सल डेटा, जो ध्वनि, ग्राफिक्स या किसी अन्य डेटा को रेंडर करने के लिए प्रासंगिक हो सकता है, उन वस्तुओं के अनुक्रम में रखा जाता है जो अस्थिर हैं, या सार्वभौमिक रूप से सभी थ्रेड्स के लिए उपलब्ध हैं, लेकिन थ्रेड मेमोरी में कभी भी नहीं रखे गए हैं। वहाँ एक मामूली प्रदर्शन जुर्माना है, लेकिन ठीक से इस्तेमाल किया गया है, इसने मुझे लचीले ढंग से एक धागा, ग्राफिक्स को दूसरे, भौतिकी को एक और, और अभी तक पारंपरिक (और खूंखार) में बांधने के बिना "गेम लूप" के लिए ऑडियो असाइन करने की अनुमति दी है।
तो एक नियम के रूप में, सभी ओपन स्क्रीन ग्राफिक्स थ्रेड के माध्यम से जाते हैं, सभी ओडल ऑडियो थ्रेड के माध्यम से, सभी इनपुट इनपुट थ्रू के माध्यम से, और जो सभी नियंत्रण थ्रेड को व्यवस्थित करने की आवश्यकता होती है, वह थ्रेड प्रबंधन है। गेम स्टेट गेमस्टोर क्लास में आयोजित किया जाता है, जिसे वे सभी देख सकते हैं जैसे उन्हें ज़रूरत है। अगर मैं कभी यह तय करता हूं कि, जॉयल ने डेट किया है और मैं इसके बजाय जावासाउंड के नए संस्करण का उपयोग करना चाहता हूं, तो मैं सिर्फ ऑडियो के लिए एक अलग धागा लागू करता हूं।
उम्मीद है कि आप देख रहे हैं कि मैं क्या कह रहा हूं, मेरे पास इस परियोजना पर पहले से ही कुछ हजार लाइनें हैं। यदि आप चाहते हैं कि मैं कोशिश करूं और एक साथ एक नमूना बनाऊं, तो मैं देखूंगा कि मैं क्या कर सकता हूं।