Maintenir bouton gauche de la souris sans mouvement
Bonjour à tous,
Je souhaiterais savoir s'il est normal que quand l'on maintient le bouton gauche de la souris enfoncé, sans pour autant bouger la souris, aucun n'évènement ne soit généré ?
Pour être plus précis :
J'essaie de mettre au point un jeu de tire au pigeon. Pour un peu plus de réalisme, je fais en sorte que si l'utilisateur garde le bouton gauche de la souris enfoncé, les tirs sont continus (mitraillette). Cependant cela ne semble que marché si l'on bouge le curseur de la souris tout en maintenant le bouton enfoncé.
Voici le code de la boucle principale du programme, si ça peut en éclairer certains.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| void mainLoop()
{
bool quit = false, pressed = false ;
SDL_Event event ;
int i ;
Uint32 lastShot = 0, delai = 175 ;
Uint8 r = 0,g = 0, b = 0 ;
while(!quit)
{
SDL_WaitEvent(&event) ;
int indImp = hasard() ; //Indice du type d'impact
switch(event.type)
{
case SDL_QUIT :
quit = true ;
break ;
case SDL_KEYDOWN :
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE :
quit = true ;
break ;
case SDLK_DELETE :
for(i=0;i<ind_cour;i++)
{
tabImpact[i].pos.x = -1 ;
tabImpact[i].pos.y = -1 ;
}
ind_cour = 0 ;
break ;
}
break ;
case SDL_MOUSEMOTION :
viseur.pos.x = event.button.x - viseur.img->w/2 ;
viseur.pos.y = event.button.y - viseur.img->h/2 ;
break ;
case SDL_MOUSEBUTTONDOWN :
if(event.button.button == SDL_BUTTON_LEFT)
pressed = true ;
break ;
case SDL_MOUSEBUTTONUP :
if(event.button.button == SDL_BUTTON_LEFT)
pressed = false ;
break ;
}
SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255)) ;
//On blit toute les surfaces
for(i=0;i<NB_PROF;i++)
SDL_BlitSurface(tabProf[i].img,NULL,ecran,&tabProf[i].pos) ;
if(pressed)
{
bool estBlanc = true ;
if(ind_cour < NB_IMP)
{
//On parcours le tableau des faces pour voire laquel a été touchée
if((SDL_GetTicks() - lastShot) > delai)
{
SDL_GetRGB(*((Uint32*)(ecran->pixels) + event.button.x + event.button.y*ecran->w),ecran->format,&r,&g,&b) ;
estBlanc = (r == 255) && (g == 255) && (b == 255) ;
//On test si le clic est effectue sur la zone d'une surface ou pas
if(!estBlanc)
{
FSOUND_PlaySound(FSOUND_FREE, shot) ;
lastShot = SDL_GetTicks() ;
tabImpact[ind_cour].pos.x = event.button.x - typeImp[indImp]->w/2 ;
tabImpact[ind_cour].pos.y = event.button.y - typeImp[indImp]->h/2 + 2 ;
tabImpact[ind_cour].img = typeImp[indImp] ;
ind_cour++ ;
}
}
}
}
for(i=0;i<ind_cour;i++)
{
if(tabImpact[i].pos.x != -1)
SDL_BlitSurface(tabImpact[i].img,NULL,ecran,&tabImpact[i].pos) ;
}
SDL_BlitSurface(viseur.img,NULL,ecran,&viseur.pos) ;
SDL_Flip(ecran) ;
}
} |
Merci d'avance pour vos réponse