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 :
M�me si mon assemblement de if/else est vraiment sympathique, je vois d�j� plusieurs probl�mes :
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(); } }
- 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:
Avec une structure Binding qui associe tout les �v�nements qui doivent �tre r�unis pour que le callback soit appel�.
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*)); }
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 :
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
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 } }
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 !
Partager