SDL Tastendrücke
-
Hallo!
Bei dem hier bereits genannten Spiel(anfang) versuche ich jetzt, einzelne Tastendrücke abzufragen und dann die Spieler dementsprechend zu bewegen.
Die Hauptschleife ist jetzt wie folgt:
ende=false; while (false==ende) { while (SDL_PollEvent(&ereigniss)) { if (ereigniss.type==SDL_QUIT){exit(0);} if (ereigniss.type==SDL_KEYDOWN){ switch (ereigniss.key.keysym.sym) { case SDLK_ESCAPE :exit(0); case SDLK_DOWN :tasten[1]=1; case SDLK_UP :tasten[2]=1; case SDLK_LEFT :tasten[3]=1; case SDLK_RIGHT:tasten[4]=1; case SDLK_SPACE:tasten[5]=1; case SDLK_w: tasten[7]=1; case SDLK_s: tasten[8]=1; case SDLK_a: tasten[9]=1; case SDLK_d: tasten[10]=1; case SDLK_f: tasten[11]=1; } } if (ereigniss.type==SDL_KEYUP){ switch (ereigniss.key.keysym.sym) { case SDLK_DOWN :tasten[1]=0; case SDLK_UP :tasten[2]=0; case SDLK_LEFT :tasten[3]=0; case SDLK_RIGHT:tasten[4]=0; case SDLK_SPACE:tasten[5]=0; case SDLK_w: tasten[7]=0; case SDLK_s: tasten[8]=0; case SDLK_a: tasten[9]=0; case SDLK_d: tasten[10]=0; case SDLK_f: tasten[11]=0; } } } SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format, 1,1,255)); if (1==tasten[1]){spieler[0]->ybesch+=1;} if (1==tasten[2]){spieler[0]->ybesch-=1;} if (1==tasten[3]){spieler[0]->xbesch-=1;} if (1==tasten[4]){spieler[0]->xbesch+=1;} if (1==tasten[7]) {spieler[1]->ybesch-=1;} if (1==tasten[8]) {spieler[1]->ybesch+=1;} if (1==tasten[9]) {spieler[1]->xbesch-=1;} if (1==tasten[10]){spieler[1]->xbesch+=1;} spieler[0]->posberechnen(); spieler[1]->posberechnen(); spieler[0]->anzeige(); spieler[1]->anzeige(); SDL_Flip(bildschirm); SDL_Delay(20); }
Jedoch funktioniert die Bewegung nur sehr schlecht, d.h. nach rechts funktioniert es so gut wie gar nicht, und so etwas. Woran liegt das?
-
Nach jedem case musst du ein break einfügen. Sonst werden die folgenden cases auch abgeklappert.
ende=false; while (false==ende) { while (SDL_PollEvent(&ereigniss)) { if (ereigniss.type==SDL_QUIT){exit(0);} if (ereigniss.type==SDL_KEYDOWN){ switch (ereigniss.key.keysym.sym) { case SDLK_ESCAPE :exit(0); break; case SDLK_DOWN :tasten[1]=1; break; case SDLK_UP :tasten[2]=1; break; case SDLK_LEFT :tasten[3]=1; break; case SDLK_RIGHT:tasten[4]=1; break; case SDLK_SPACE:tasten[5]=1; break; case SDLK_w: tasten[7]=1; break; case SDLK_s: tasten[8]=1; break; case SDLK_a: tasten[9]=1; break; case SDLK_d: tasten[10]=1; break; case SDLK_f: tasten[11]=1; break; } } if (ereigniss.type==SDL_KEYUP){ switch (ereigniss.key.keysym.sym) { case SDLK_DOWN :tasten[1]=0; break; case SDLK_UP :tasten[2]=0; break; case SDLK_LEFT :tasten[3]=0; break; case SDLK_RIGHT:tasten[4]=0; break; case SDLK_SPACE:tasten[5]=0; break; case SDLK_w: tasten[7]=0; break; case SDLK_s: tasten[8]=0; break; case SDLK_a: tasten[9]=0; break; case SDLK_d: tasten[10]=0; break; case SDLK_f: tasten[11]=0; break; } } } SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format, 1,1,255)); if (1==tasten[1]){spieler[0]->ybesch+=1;} if (1==tasten[2]){spieler[0]->ybesch-=1;} if (1==tasten[3]){spieler[0]->xbesch-=1;} if (1==tasten[4]){spieler[0]->xbesch+=1;} if (1==tasten[7]) {spieler[1]->ybesch-=1;} if (1==tasten[8]) {spieler[1]->ybesch+=1;} if (1==tasten[9]) {spieler[1]->xbesch-=1;} if (1==tasten[10]){spieler[1]->xbesch+=1;} spieler[0]->posberechnen(); spieler[1]->posberechnen(); spieler[0]->anzeige(); spieler[1]->anzeige(); SDL_Flip(bildschirm); SDL_Delay(20); }
-
Danke, jetzt gehts