Nota: devo effettuare il polling, piuttosto che effettuare callback a causa delle limitazioni API (SFML). Mi scuso anche per la mancanza di un titolo "decente".
Penso di avere due domande qui; come registrare l'input che sto ricevendo e cosa farne.
Gestione dell'input
Sto parlando dopo il fatto che ti sei registrato che il tasto 'A' è stato premuto, ad esempio, e come farlo da lì.
Ho visto una serie di tutta la tastiera, qualcosa del tipo:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Ma questo sembra inefficiente. Non solo stai accoppiando il tasto 'A' al 'giocatore che si sposta a sinistra', ad esempio, ma controlla ogni tasto, 30-60 volte al secondo.
Ho quindi provato un altro sistema che cercava le chiavi che voleva.
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.
Tuttavia, il problema è che non posso ora digitare un nome, ad esempio, senza dover associare ogni singola chiave.
Quindi, ho il secondo problema, che non riesco davvero a pensare a una buona soluzione per:
Invio input
Ora so che è stato premuto il tasto A o che playerLeft è vero. Ma come posso andare da qui?
Ho pensato di controllare
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
Questo accoppia in modo significativo l'input alle entità e lo trovo piuttosto disordinato. Preferirei che il giocatore gestisse il proprio movimento quando viene aggiornato. Pensavo che un qualche tipo di sistema di eventi potesse funzionare, ma non so come seguirlo. (Ho sentito i segnali e le slot erano buone per questo tipo di lavoro, ma apparentemente è molto lento e non riesco a vedere come si adatterebbe).
Grazie.