Bonjour,
Je travaille actuellement sur un projet de moteur de jeu (juste pour m'�clater, rien de s�rieux),
et je bloque sur la gestion des events et des entr�es utilisateur.

I| Event Manager

Pour l'instant, j'ai une boucle du style :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
 
while(running) {
    Event event = getNextEvent();
    if(event == KeyPressed && event.code == Key::Escape) {
        closeApp();
    }
}
M�me si mon assemblement de if/else est vraiment sympathique, je vois d�j� plusieurs probl�mes :
  • mon code va vite �tre difficile � maintenir, surtout si je commence � relier une action � plusieurs �v�nements
  • je suis oblig� d'inclure toutes les d�clarations de fonctions/m�thodes que je souhaite relier � un �v�nement
  • il va �tre tr�s compliqu� de "rebind" les actions (ex: je veux passer d'un clavier QWERTY � AZERTY)


Du coup, j'avais pens� faire une classe EventManager du style:

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
class EventManager {
public:
    notify(Event *event);  //permet à n'importe qui de prévenir qu'un évènement est arrivé
    getNotified(Binding *binding, void(*callback)(Binding*));
}
Avec une structure Binding qui associe tout les �v�nements qui doivent �tre r�unis pour que le callback soit appel�.
Sauf que la aussi, j'ai plusieurs questions qui restent en suspens :
  • Sachant que dans ma boucle de jeu, handleInput() et render() s'executent quand ils peuvent, mais que update() s'execute � intervale r�gulier, ne vaut il pas mieux que les callback soient appel�s � chaque update(), et que je leur passe le deltatime en argument ?
  • Cette question rejoint un peu la pr�c�dente, mais ne vaudrait-il pas mieux que j'appelle handleInput() avant chacune des update(), pour �viter de faire trop de suppositions sur le d�placement du personnage?


II| Input Manager

Jusque l�, je ne parlais que d'�v�nements ponctuel, du type "une touche vient d'�tre press�e", ce qui est bien dans le cas
ou je souhaite, par exemple, que mon personnage lance un sort, mais si je veux que mon personnage se d�place,
j'utilise plut�t quelque chose comme :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
while(running) {
    if(Keyboard.isKeyPressed(Key::Z) {
        actor.move(0.0f, 1.0f)  //déplace actor sur l'axe +y
    }
}
Or la, je n'ai aucune id�e de comment g�rer �a correctement. Est-ce qu'il est pr�f�rable que j'impl�mente un InputManager
similaire � mon EventManager, mais qui, � chaque tour de boucle, v�rifie si les touches inscrites via getNotified(...) sont press�e ?
Devrais-je plut�t l'int�grer directement � mon EventManager ?

Voila, je pense que j'ai expos� la majorit� de mes questions,
Merci beaucoup � ceux qui ont pris le temps de me lire !