Journal Pb de dev avec lib SDL.

Posté par  (site web personnel) .
Étiquettes : aucune
0
25
oct.
2003
Salut à toi journal.

Petit problème de progrmmation avec la librairie SDL.

J'ai écrit (ou plutot tenté...), après lecture d'un tutoriel, une appli qui affiche à l'écran des carré de 15*15 pixels aux coords des 20 dernieres positions lorsque le bouton de la souris est enfoncé.
Ca marche quand je détecte SDL_MOUSEMOTION, mais pas avec SDL_MOUSEBUTTONDOWN

le code

while (SDL_PollEvent (&event))
{
switch (event.type)
{

case SDL_QUIT:
done = 1;
break;

case SDL_MOUSEMOTION:
break;

case SDL_MOUSEBUTTONDOWN:

if ( ((SDL_MouseButtonEvent*)&event) -> state == SDL_PRESSED) {
mouse_x[mouse_pos] = ((SDL_MouseButtonEvent*)&event)->x;
mouse_y[mouse_pos] = ((SDL_MouseButtonEvent*)&event)->y;
mouse_pos++;
if(mouse_pos == MAX_MOUSE_POS)
mouse_pos = 0;} else
break;

case SDL_MOUSEBUTTONUP :
break;


}

}

Le tableau mouse_x et y enregistrent les 20 dernières valeurs, on les affichent, pas de problème là dessus.

Ca marche pas tout à fait comme je veux : Je voudrais que les points s'affichent lorsque je RESTE cliqué.

Le problème c'est que mouse_pos ne s''incrémente que lorsque je relache le bouton.

Faut cliquer à chaque fois pour afficher un carré,


Merci aux courageux qui tenteront de répondre ! :o)
  • # Re: Pb de dev avec lib SDL.

    Posté par  (site web personnel) . Évalué à 2.

    Perso j'utilise un SDL_GetMouseState() pour faire ce genre de choses.

    En gros ce que tu peux faire donc c'est avoir une variable grab, l'initialiser lorsque t'as un SDL_MOUSEBUTTONDOWN, et l'enlever lors d'un SDL_MOUSEBUTTONUP, et a chaque tour de ta boucle faire du SDL_GetMouseState... ou utiliser SDL_MOUSEMOTION :)
  • # Re: Pb de dev avec lib SDL.

    Posté par  (site web personnel) . Évalué à 2.

    SDL_MOUSEBUTTONDOWN est un évènement qui ne correspond qu'à la descente du bouton et pas à l'été appuyé de celui-ci. Il est déclenché uniquement lorsque tu enfonce le bouton pas lorsque tu le maintiens enfoncé.

    Idem pour UP : l'èvènement correspond au relâchement.

    Solution : soit GetState soit tu positionne un flag à 1 lorsque tu reçois DOWN, dans MOTION tu teste d'abord si flag==1, et dans UP tu remets ton flag à 0.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.