Quel est la méthode la plus rapide ?
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:
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)
Code:
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... |
Faut voir avec la complexité maintenant mais, je n'ai jamais très bien compris comment la mesurer.
Merci d'avance pour votre aide.