Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [2.0] Maintenir le clic souris ne donne rien  (Lu 2540 fois)

0 Membres et 1 Invité sur ce sujet

Chnossos

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • Deep Space Battle - MMOAG spatial
[2.0] Maintenir le clic souris ne donne rien
« le: Mai 19, 2013, 02:16:27 am »
Bonjour,

Je m'essaye a un projet SFML depuis hier, c'est vraiment sympa comme bibliothèque, j'avais jamais touché à quelque chose comme ça et la prise en main est rapide, les tuto plutôt bien expliqués, félicitation.

Mon projet actuellement est simple : un background, un vaisseau collé au milieu de l'écran, et le background se déplace lorsque l'on clique autour du vaisseau.

Aucun problème, c'est très réactif, dans la mesure où on clique non-stop pour aller là où on veut.
Par contre cliquer comme un fou pour avancer c'est assez barbant au bout d'un moment, et là j'ai remarqué qu'il n'y avait rien pour gérer le cas où l'on maintient un bouton de la souris enfoncé.

J'ai été obligé de ruser, avec une variable booléenne que je mets à true lorsque le clic est enfoncé, que je mets à false lorsque ce même bouton est relevé, et lorsque la souris se déplace, si la valeur est true alors on déplace le vaisseau.

Le problème de cette technique c'est qu'on constate rapidement qu'on a perdu en réactivité. Parfois je clique dans une direction et rien ne se passe, il faut que je bouge la souris quelques pixels plus loin pour que ça reparte ... Parfois je quitte le mode touche maintenue, et il y a un bon délai avant que le vaisseau se remette à bouger malgré les clics répétés.

Alors j'aurais aimé savoir s'il y avait une meilleure technique, qui mangerait moins de ressource (parce que bon la souris elle peut potentiellement bouger très rapidement, et checker à chaque pixel traversé si on souhaite se déplacer, c'est vraiment lourd).
« Modifié: Mai 19, 2013, 02:32:56 am par Nekkro »

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : [2.0] Maintenir le clic souris ne donne rien
« Réponse #1 le: Mai 19, 2013, 05:27:59 am »
sf::Mouse::isButtonPressed(sf::Mouse::Left) existe

Ton problème de "réactivité", il vient pas du fait que tu fais bouger ton background à l'intérieur d'un évènement MouseMoved ? (et donc tu dois bouger la souris pour que ça bouge...)
Et sinon, je pense pas qu'on puisse dire que ça soit quelque chose de gourmand ça. :D Que la souris bouge de 1 pixel ou 250, ça revient au même au niveau des évènements.

Chnossos

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • Deep Space Battle - MMOAG spatial
Re : [2.0] Maintenir le clic souris ne donne rien
« Réponse #2 le: Mai 19, 2013, 01:56:13 pm »
Citer
sf::Mouse::isButtonPressed(sf::Mouse::Left) existe

Je l'utilise déjà, bien entendu, sinon comment aurais-je pu catcher les évènements de la souris, comme expliqué dans mon premier message ?

Citer
Ton problème de "réactivité", il vient pas du fait que tu fais bouger ton background à l'intérieur d'un évènement MouseMoved ? (et donc tu dois bouger la souris pour que ça bouge...)

C'est exactement ça ! Merci :)

Citer
Que la souris bouge de 1 pixel ou 250, ça revient au même au niveau des évènements.

Si la souris bouge d'1 pixel, alors ça génère 1 évènement, si elle bouge de 250, alors ça génère 250 évènement de type MouseMoved ^^ (Il suffit d'afficher à un message à chaque event de ce type pour s'en rendre compte).

Edit : Il me manquait un break après un case, et surtout il n'y avait pas d'update de la destination si je cliquais sans déplacer ma souris (logique puisque l'update se faisait uniquement lorsque la souris bougeait).
Il m'a suffit de dupliquer l'update également lorsque j'effectue un simple clic, et tout marche à la perfection !

Problème résolu, merci à toi.

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : [2.0] Maintenir le clic souris ne donne rien
« Réponse #3 le: Mai 19, 2013, 11:56:07 pm »
Je pensais que tu utilisais sf::Event::MouseButtonPressed pour mettre ton bool à true et sf::Event::MouseButtonReleased pour le mettre à false. (et du coup que tu répliquais à ta sauce le isButtonPressed)

Etrange ton MouseMoved qui se déclenche 250 fois si tu bouges de 250 pixels.
Moi si je bouge de 250 pixels en une seule frame, je n'ai qu'un seul évènement MouseMoved qui se déclenche, et pas 250. (et je pense que c'est le comportement normal :P)