नोट: मुझे API सीमाओं (SFML) के कारण कॉलबैक करने के बजाय चुनाव करना है। मैं एक 'सभ्य' शीर्षक की कमी के लिए भी माफी माँगता हूँ।
मुझे लगता है कि मेरे यहाँ दो प्रश्न हैं; मुझे प्राप्त होने वाले इनपुट को कैसे पंजीकृत करना है, और इसके साथ क्या करना है।
इनपुट संभालना
मैं इस तथ्य के बाद बात कर रहा हूं कि आपने पंजीकृत किया है कि 'ए' कुंजी को दबाया गया है, उदाहरण के लिए, और वहां से इसे कैसे करना है।
मैंने पूरे कीबोर्ड की एक सरणी देखी है, जैसे कुछ:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
लेकिन यह अक्षम लगता है। उदाहरण के लिए, न केवल आप 'ए' को 'प्लेयर को लेफ्ट मूव' कर रहे हैं, बल्कि यह हर कुंजी को 30-60 बार चेक करता है।
मैंने तब एक और प्रणाली की कोशिश की, जो सिर्फ चाबी की तलाश में थी।
std::map< unsigned char, Key> keyMap; //Key stores the keycode, and whether it's been pressed. Then, I declare a load of const unsigned char called 'Quit' or 'PlayerLeft'.
input->BindKey(Keys::PlayerLeft, KeyCode::A); //so now you can check if PlayerLeft, rather than if A.
हालाँकि, इसके साथ समस्या यह है कि मैं अब एक नाम नहीं लिख सकता, उदाहरण के लिए, हर एक कुंजी को बाँधने के बिना।
फिर, मेरे पास दूसरी समस्या है, जिसके लिए मैं वास्तव में एक अच्छा समाधान नहीं सोच सकता:
इनपुट भेज रहा है
अब मुझे पता है कि A कुंजी दबा दी गई है या वह खिलाड़ी है जो सही है। लेकिन मैं यहां से कैसे जाऊं?
मैंने सोचा कि बस if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
इस कपल ने संस्थाओं के लिए इनपुट की बहुत जाँच
की है, और मुझे यह गड़बड़ लगता है। जब यह अद्यतन हो जाता है तो मैं अपने स्वयं के आंदोलन को संभालना पसंद करूंगा। मुझे लगा कि किसी प्रकार की घटना प्रणाली काम कर सकती है, लेकिन मुझे नहीं पता कि इसके साथ कैसे जाना है। (मैंने सुना है कि इस तरह के काम के लिए सिग्नल और स्लॉट अच्छे थे, लेकिन यह स्पष्ट रूप से बहुत धीमा है और मैं यह नहीं देख सकता कि यह कैसे फिट होगा)।
धन्यवाद।