Nota: Tengo que sondear, en lugar de hacer devoluciones de llamada debido a limitaciones de API (SFML). También me disculpo por la falta de un título 'decente'.
Creo que tengo dos preguntas aquí; cómo registrar la entrada que estoy recibiendo y qué hacer con ella.
Manejo de entrada
Me refiero después del hecho de que haya registrado que se ha presionado la tecla 'A', por ejemplo, y cómo hacerlo desde allí.
He visto una variedad de todo el teclado, algo así como:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Pero esto parece ineficiente. Por ejemplo, no solo está acoplando la tecla 'A' al 'jugador que se mueve hacia la izquierda', sino que verifica cada tecla, 30-60 veces por segundo.
Luego probé otro sistema que solo buscaba las claves que quería.
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.
Sin embargo, el problema con esto es que ahora no puedo escribir un nombre, por ejemplo, sin tener que vincular cada clave.
Entonces, tengo el segundo problema, que realmente no puedo pensar en una buena solución para:
Enviando entrada
Ahora sé que se ha presionado la tecla A o que el jugador Izquierdo es verdadero. ¿Pero cómo voy desde aquí?
Pensé en simplemente marcar
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
Esto acopla la entrada a las entidades, y me parece bastante desordenado. Prefiero que el jugador maneje su propio movimiento cuando se actualiza. Pensé que algún tipo de sistema de eventos podría funcionar, pero no sé cómo hacerlo. (Escuché señales y las ranuras eran buenas para este tipo de trabajo, pero aparentemente es muy lento y no puedo ver cómo encajaría).
Gracias.