Catatan: Saya harus melakukan polling, daripada melakukan panggilan balik karena keterbatasan API (SFML). Saya juga minta maaf karena kurangnya judul yang 'layak'.
Saya pikir saya punya dua pertanyaan di sini; cara mendaftar input yang saya terima, dan apa yang harus dilakukan dengannya.
Menangani Input
Saya sedang berbicara tentang fakta bahwa Anda telah mendaftarkan bahwa tombol 'A' telah ditekan, misalnya, dan bagaimana melakukannya dari sana.
Saya telah melihat array seluruh keyboard, seperti:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Tetapi ini tampaknya tidak efisien. Anda tidak hanya menyambungkan kunci 'A' ke 'pemain bergerak ke kiri', misalnya, tetapi memeriksa setiap kunci, 30-60 kali per detik.
Saya kemudian mencoba sistem lain yang hanya mencari kunci yang diinginkan.
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.
Namun, masalah dengan ini adalah saya sekarang tidak bisa mengetik nama, misalnya, tanpa harus mengikat setiap kunci.
Lalu, saya memiliki masalah kedua, yang saya tidak bisa memikirkan solusi yang baik untuk:
Mengirim Input
Saya sekarang tahu bahwa tombol A telah ditekan atau bahwa playerLeft benar. Tetapi bagaimana saya pergi dari sini?
Saya berpikir untuk mengecek
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
input pasangan ini sangat ke entitas, dan saya merasa agak berantakan. Saya lebih suka pemain untuk menangani gerakannya sendiri ketika diperbarui. Saya pikir beberapa jenis sistem acara bisa berfungsi, tetapi saya tidak tahu bagaimana caranya. (Saya mendengar sinyal dan slot bagus untuk pekerjaan semacam ini, tetapi tampaknya sangat lambat dan saya tidak bisa melihat bagaimana itu cocok).
Terima kasih.