CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SDL][MOUSE] probleme d'event.

guyver2
guyver2
Niveau 10
14 avril 2005 à 10:47:54

j´ai fait un petit shoot en 2d grace au kit de lapintade et je voulait gerer les déplacements/action du joueur avec la souris.
je me renseigne et trouve un tuto expliquant comment gerer les evenement SDL " clique de la souris" et " mvt de la souris".

pour le mouvement pas de probleme.
mais pour les cliques j´ai un code de ce genre:
-------
switch ( event.type) {
. ..
case SDL_MOUSEBUTTONUP:
switch( event.button.button )
{
case SDL_BUTTON_LEFT:
IsSouris1=0;
break;
case SDL_BUTTON_RIGHT:
IsSouris2=0;
break;
default:
break;
}
case SDL_MOUSEBUTTONDOWN:
switch( event.button.button )
{
case SDL_BUTTON_LEFT:
IsSouris1=1;
break;
case SDL_BUTTON_RIGHT:
IsSouris2=1;
break;
default:
break;
}
. ..
---------
mais quand je clique ( et reste appuyer) le prog rentre dans SDL_BUTTONUP et SDL_BUTTONDOWN ( au lieu de ne passer que dans SDL_BUTTONDOWN)
ce qui fait que ma variable ( IsSouris1 ou IsSouris2) prend la valeur qui lui est affécté dans le deuxieme " case" . y a t´il une erreur de syntaxe ou un truc que je n´ai pas fait???

si c´est pas clair dites le moi.
merci

JeanYvesYves
JeanYvesYves
Niveau 10
14 avril 2005 à 12:00:06

Je sais ou est ton erreur :
tu imbriques des switch : cependant, tu n´as pas assez de break.
regarde : j´appelle SWITCHIN ta partie :

switch( event.button.button )
{
case SDL_BUTTON_LEFT:
IsSouris1=1;
break;
case SDL_BUTTON_RIGHT:
IsSouris2=1;
break;
default:
break;
}

Elle, elle est bien écrite, avec les brak ou il faut, bref, c´est bien !

Maintenant, réécris plus simplement du switch principal :

switch ( event.type) {
. . .
case SDL_MOUSEBUTTONUP:
SWITCHIN
case SDL_MOUSEBUTTONDOWN:
. ...
}

L´erreur est la : tu ne fais pas de break apres le SWITCHIN, donc il passe dans le 2e event

Pour conclure, la réponse est donc :

switch ( event.type) {
. . .
case SDL_MOUSEBUTTONUP:
switch( event.button.button )
{
case SDL_BUTTON_LEFT:
IsSouris1=0;
break;
case SDL_BUTTON_RIGHT:
IsSouris2=0;
break;
default:
break;
}
break; / / < ------ celui ci oublié
case SDL_MOUSEBUTTONDOWN:
switch( event.button.button )
{
case SDL_BUTTON_LEFT:
IsSouris1=1;
break;
case SDL_BUTTON_RIGHT:
IsSouris2=1;
break;
default:
break;
}
break; / / < ------ celui ci oublié aussi

guyver2
guyver2
Niveau 10
14 avril 2005 à 13:46:37

effectivement j´ai essayer plusieur truc ce midi et maintenant ca marche.
et tu a raison c´est bien les " break" manquant qui posaient probleme.

merci bien.

autre question : est-il possible de ralentire la vitesse de la souris.
je m´explique:
dans mon shoot les coordonées du pointeur de la souris sont affécté aux coordonnées de l´avion donc l´avion se déplace a la meme vitesse que la souris. ( et en en un rien de temps il traverse l´écran et peut meme ratraper ses tirs).
donc est-il possible de ralentir le mvt de la souris?
http://www.info.univ-angengers.fr/pub/letouzey/jeux.php

JeanYvesYves
JeanYvesYves
Niveau 10
14 avril 2005 à 14:01:23

oui, tu peux :

en fait, l´event MOTION que tu dois utiliser te renvoie une structure dans laquelle il y a bien sur x et y qui t´indiquent la position de la souris, mais également

xrel et yrel
qui eux, te renvoie la différence entre l´actuel et la derniere frame :
en gros, si tu as xrel = -4, ça veut dire que la souris a bougé de -4 en x depuis la derniere fois...

Utilise ces données la. Et pour ralentir, divise, par exemple, xrel et yrel par 2...

regarde la structure :
http://sdldoc.csn.ul.ie/sdlmousemotionevent.php

guyver2
guyver2
Niveau 10
14 avril 2005 à 15:47:59

ok merci.
dans mon prog j´utilisait la position courante du curseur et il faut donc que j´utilise la difference entre la position actuelle et la precedente. si j´ai bien compris.
j´aissaye ça se soir.

guyver2
guyver2
Niveau 10
22 septembre 2005 à 22:41:22

nouvelle question sur la gestion de la souris avec la librairie SDL:

je voudrait changer l´image du curseur de la souris.
alors je cherche dans SDL et je trouve ceci
____________________________
extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor
(Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y);

/*
* Set the currently active cursor to the specified one.
* If the cursor is currently visible, the change will be immediately
* represented on the display.
*/
_________________________

alors j´imagine que c´est ce que je cherche; mais comment on s´en sert...

ou alors si c´est pas ça est-ce qu´il y a une fonction pour faire ce que je veux

merci

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2005 à 14:23:30

je ne te conseille pas cette fonction :
en effet, elle te permettra de remplir un curseur en noir et blanc, donc ... bref !

Moi je te conseille de mettre le curseur de souris invisible, déja.
Mais de gérer quand meme la mouse motion.
Ensuite, tu fais un Blit d´une image de ton choix, chargée avec SDL_LoadBMP, en couleur et ton, a la coordonnée xmouse,ymouse juste avant de faire le flip.

Astuce puissante te permettant de mettre un curseur en couleur de la taille de ton choix et dessiné par tes soins.

guyver2
guyver2
Niveau 10
23 septembre 2005 à 16:06:07

alors je suis flaté parce que c´est la premiere idée que j´ai developpée :) (et toi tu me dit que c´est une "Astuce puissante" merci)

mais le prob c´est que ma fenetre est plus petite que l´ecran et que si je deplace trop vite la souris et qu´elle sort de l´ecran le dessin reste affiché a la derniere position connue de la souris. (pas glop)

donc existe t-il une fonction pour savoir si le curseur est hors de la fenetre.
j´ai deja fais une petite fonction qui verifiai si les coordonnées renvoyéses par SDL_GetMouseState() se trouvaient bien dans ma fenetre
si [(x>0) et (x<largeur) et (y>0) et (y<hauteur)]
alors affichage du curseur

mais comme dit plus haut ça marche pas terrible..
mais au pire (et vu que j´ai pas l´intention de faire un truc parfait) je laisse tomber et je me contente de ce que j´ai.

merci bien

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2005 à 16:34:54

a mon avis, il y a uen histoire d´events : je n´ai pas essayé :

Essaie de voir si un evenement est empilé si la souris sort ou rerentre dans ta fenetre :

http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fEvent

Il est possible que ActiveEvent ou ExposeEvent soient activés, essaie de voir cela déja.
Sinon, il y a surement des fonctions poru bloquer la souris dans l´écran, ou alors sinon - et c´est possible - ça dépend de l´OS.
Et dans ces cas la, il y a forcément une fonction de windows.h qui te dit cela

guyver2
guyver2
Niveau 10
25 septembre 2005 à 23:04:23

merci bien ça me fait plusieur truc a essayer.

fonctions poru bloquer la souris dans l´écran,

exclus car le programme est un morpion fonctionnant via internet et pour les test j´ai toujours 2 fenetres ouvertes (serveur/client).

mais le reste est assez interressant je vais me pencer dessus.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment