Remarque: je dois interroger plutôt que de faire des rappels en raison des limitations de l'API (SFML). Je m'excuse également pour l'absence d'un titre «décent».
Je pense que j'ai deux questions ici; comment enregistrer l'entrée que je reçois et quoi en faire.
Gestion de l'entrée
Je parle après le fait que vous avez enregistré que la touche «A» a été enfoncée, par exemple, et comment le faire à partir de là.
J'ai vu un tableau de l'ensemble du clavier, quelque chose comme:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Mais cela semble inefficace. Non seulement vous couplez la clé «A» au «joueur se déplaçant vers la gauche», par exemple, mais il vérifie chaque clé, 30 à 60 fois par seconde.
J'ai ensuite essayé un autre système qui cherchait juste les clés qu'il voulait.
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.
Cependant, le problème avec ceci est que je ne peux pas maintenant taper un nom, par exemple, sans avoir à lier chaque clé.
Ensuite, j'ai le deuxième problème, que je ne peux pas vraiment penser à une bonne solution pour:
Envoi d'entrée
Je sais maintenant que la touche A a été enfoncée ou que playerLeft est vrai. Mais comment je vais partir d'ici?
J'ai pensé à vérifier simplement que
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
ceci couple grandement l'entrée aux entités, et je la trouve plutôt désordonnée. Je préférerais que le joueur gère son propre mouvement lorsqu'il est mis à jour. Je pensais qu'une sorte de système d'événements pourrait fonctionner, mais je ne sais pas comment y aller. (J'ai entendu que les signaux et les créneaux horaires étaient bons pour ce genre de travail, mais c'est apparemment très lent et je ne vois pas comment cela irait).
Merci.