หมายเหตุ: ฉันต้องสำรวจแทนที่จะโทรกลับเนื่องจากข้อ จำกัด API (SFML) ฉันยังขอโทษที่ไม่มีชื่อ 'ที่เหมาะสม'
ฉันคิดว่าฉันมีสองคำถามที่นี่; วิธีการลงทะเบียนข้อมูลที่ฉันได้รับและจะทำอย่างไรกับมัน
การจัดการอินพุต
ฉันกำลังพูดถึงหลังจากที่คุณได้ลงทะเบียนว่ามีการกดแป้น 'A' ตัวอย่างเช่นและวิธีการทำจากที่นั่น
ฉันเคยเห็นชุดแป้นพิมพ์ทั้งหมดเช่น:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
แต่ดูเหมือนว่าจะไม่มีประสิทธิภาพ ไม่เพียง แต่คุณจะมีการเชื่อมต่อปุ่ม 'A' ถึง 'ผู้เล่นที่เลื่อนไปทางซ้าย' แต่มันจะตรวจสอบทุก ๆ 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(); }
คู่นี้นำเข้าข้อมูลอย่างมากต่อเอนทิตีและฉันคิดว่ามันค่อนข้างยุ่ง ฉันต้องการให้ผู้เล่นจัดการกับการเคลื่อนไหวของตัวเองเมื่อได้รับการอัปเดต ฉันคิดว่าระบบเหตุการณ์บางอย่างสามารถทำงานได้ แต่ฉันไม่รู้ว่าจะไปได้อย่างไร (ฉันได้ยินสัญญาณและช่องเสียบนั้นดีสำหรับงานประเภทนี้ แต่เห็นได้ชัดว่าช้ามากและฉันไม่สามารถเห็นได้ว่ามันจะเข้ากันได้อย่างไร)
ขอบคุณ