Not: API sınırlamaları (SFML) nedeniyle geri arama yapmak yerine anket yapmak zorundayım. Ayrıca 'iyi' bir unvanın olmaması nedeniyle özür dilerim.
Sanırım burada iki sorum var; aldığım girişin nasıl kaydedileceği ve ne yapılacağı.
İşleme Girişi
Örneğin, 'A' tuşuna basıldığını ve oradan nasıl yapılacağını kaydettikten sonra bahsediyorum.
Bütün klavye bir dizi gördüm, gibi bir şey:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Ama bu verimsiz görünüyor. Örneğin, sadece 'A' anahtarını 'sola hareket eden oyuncuya' bağlamakla kalmaz, aynı zamanda saniyede 30-60 kez her anahtarı kontrol eder.
Daha sonra istediği anahtarları arayan başka bir sistemi denedim.
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.
Ancak, bununla ilgili sorun, şimdi her bir anahtarı bağlamak zorunda kalmadan bir ad yazamıyorum.
Sonra, gerçekten iyi bir çözüm düşünemiyorum ikinci sorun var:
Girdi Gönderme
Artık A tuşuna basıldığını veya playerLeft'in doğru olduğunu biliyorum. Ama buradan nasıl gideceğim?
Sadece kontrol if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
etmeyi düşündüm
Bu, girişleri büyük ölçüde çiftler ve oldukça dağınık buluyorum. Güncellendiğinde oyuncunun kendi hareketini yapmasını tercih ederim. Bir tür olay sisteminin çalışabileceğini düşündüm, ancak bununla nasıl başa çıkacağımı bilmiyorum. (Sinyallerin ve yuvaların bu tür işler için iyi olduğunu duydum, ama görünüşe göre çok yavaş ve nasıl uyduğunu göremiyorum).
Teşekkürler.