मुझे पता है कि यह प्रश्न कई बार पूछा गया है, लेकिन मुझे अभी भी यकीन नहीं है कि घटक आधारित इंजन में इनपुट हैंडलिंग को कैसे लागू किया जाए।
मेरे द्वारा उपयोग किया जाने वाला घटक आधारित डिजाइन टी = मशीन की ब्लॉग श्रृंखला और आर्टेमिस पर आधारित था जिसमें एंटिटीज सिर्फ आईडी हैं।
इनपुट हैंडलिंग को लागू करने में मेरे पास तीन मुख्य विचार हैं:
- इनपुट घटक उन आयोजनों को आयोजित करेगा जो इसमें रुचि रखते हैं। इनपुट सिस्टम खेल की घटनाओं के लिए कुंजी और माउस आयोजनों का अनुवाद करेगा और इनपुट घटक के साथ संस्थाओं के माध्यम से लूप करेगा और यदि वे इस घटना में रुचि रखते हैं तो इनपुट सिस्टम द्वारा एक उचित कार्रवाई की जाएगी। यह क्रिया इनपुट सिस्टम के लिए कठिन कोड होगी।
- कोई इनपुट घटक नहीं। आप विशिष्ट घटनाओं के साथ संस्थाओं को इनपुट सिस्टम में पंजीकृत करेंगे। इनपुट सिस्टम फिर अन्य सिस्टम में संदेश भेजेगा (निकाय आईडी और इवेंट प्रकार के साथ) ताकि ये उचित कार्रवाई कर सकें। या जैसा कि पहले मामले में, कार्रवाई को इनपुट सिस्टम में हार्ड-कोड किया जाएगा।
- पहली विधि के समान, लेकिन इनपुट सिस्टम को कार्रवाई को हार्ड कोडिंग के बजाय, घटक में फ़ंक्शन (यानी
std::map<std::function>
) के लिए घटनाओं का एक नक्शा शामिल होगा, जिसे इनपुट सिस्टम द्वारा कहा जाएगा। यह एक ही घटना को अलग-अलग क्रियाओं को युगल करने में सक्षम होने का अतिरिक्त प्रभाव है।
क्या आप उपरोक्त विधियों में से किसी की भी सिफारिश करेंगे या क्या आपके पास कोई सुझाव है जो मुझे एक लचीली इनपुट हैंडलिंग प्रणाली को लागू करने में मदद करेगा? इसके अलावा, मैं अभी तक मल्टी-थ्रेडिंग से परिचित नहीं हूं, लेकिन कार्यान्वयन थ्रेड-फ्रेंडली बनाने वाले किसी भी सुझाव का भी स्वागत है।
नोट: एक अतिरिक्त आवश्यकता जिसे मैं पूरा करने के लिए कार्यान्वयन चाहूंगा वह यह है कि मैं एक ही समय में एक कैमरा इकाई और खिलाड़ी को स्थानांतरित करने के लिए कई संस्थाओं के लिए एक ही इनपुट पास कर पाऊंगा।