Salut, je voudrais en fait passer les événements de différentes librairies à une interface commune.
Alors, j'ai deux solution pour passer les types de événements et les paramètres des événements, cependant je ne sais pas pour laquelle opter.
1ère solution :
Je fais un if sur le type de l'événement et en fonction du type de l'événement j'affecte les bons paramètres un exemple :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SystemEvent popEvent () { sf::Event event; if (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { SystemEvent sysevent; sysevent.eventID = sf::Event::Closed; sysevent.info.origin = SystemEvent::Origin::Window; sysevent.info.type = SystemEvent::Type::NO_TYPE; sysevent.paramID = SystemEvent::Type::NO_TYPE; return sysevent; //Nothing. } else if (event.type == sf::Event::Resized) { //.... } } }
La seconde solution est de parcourir tout les états (fenêtre, clavier, souris, etc...) et de générer un événement si il y a un changement d'état. (Ce qui serait plus long si il y a beaucoup d'état à vérifier comme par exemple pour vérifier l'était de chaque touche du clavier. (Mais il y aura moins de if)
Faut voir avec la complexité maintenant mais, je n'ai jamais très bien compris comment la mesurer.
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //Exécuter à chaque tout de boucle. void produceEvents () { for (unsigned int i = 0; i < sf::Keyboard::Key::Count, i++) { if (sf::Keyboard::isKeyPressed(i) || keyStates[i] !=(sf::Keyboard::isKeyPressed(i)) { keyStates[i] = !keyStates[i]; //On créer l'événement et ou l'ajoute dans la pile. } } } //Et on fait la même chose pour la fenêtre, la souris, etc...
Merci d'avance pour votre aide.
Partager