PC reagiert zu schnell

WorldRacer

Erfahrenes Mitglied
Hi zusammen,

ich habe ein kleines Problem. Ich habe ein kleines Menü programmiert, dass, wie soll es auch anders sein ;-), über die Maus und die Tastatur gesteuert wird. Allerdings ist das Ding zu schnell. Wenn ich einen Menüpunkt anklicke und ein Menüpunkt im darauf folgenden Menü liegt genau da hinter, reagiert mein Programm schon, bevor ich überhaupt die Maus losgelassen habe. Was sollte man da genau machen?

Gruß,

WR
 
Hallo,

du musst beide Ereignisse auswerten: MOUSEDOWN um die Aktion vorzumerken und MOUSEUP um die Aktion ausführen. Damit die Aktion zur Ausführung kommt, sollten beide Ereignisse im selben Kontext stattfinden; In deinem Fall also auf dem selben Menüeintrag (die Mause könnte ja inzwischen sonstwohin bewegt worden sein).

Gruß
MCoder
 
Ja, ich weiß dass ich das Menü auf MouseUp reagieren lassen muss, allerdings ist das programm zu schnell, dass es kapiert, dass ein MouseUp vorlag...

Ich verzweifle... Ich poste euch mal meinen Code...
Code:
// Programm-Hauptschleife
	while(!done){
		// Taste gedrückt?
		
		if (SDL_PollEvent(&event)) {
			switch (event.type) {
				case SDL_QUIT:
					done = 1;
					break;
				case SDL_KEYDOWN:
					switch (event.key.keysym.sym) {
						case SDLK_ESCAPE:
							done = 1;
							break;
					}
					break;
				case SDL_MOUSEBUTTONUP:           //mouse button pressed
					  mup = 1;
					  break; 
				



			}
			/*if(event.button.button == 1 && event.button.state == SDL_RELEASED && statebefore == 0){
						MessageBoxA(0, "Lah1", "Lah1", MB_OK);
					}*/
		}
		// Render-Abschnitt:
		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, back_r, back_g, back_b));
		// Menüführung:
		if(menu){
			if(nMenu == 1){
				st_MAINMENU.Show();
				st_MAINMENU.Render(screen);
				st_MAINMENU_NEWGAME.Show();
				st_MAINMENU_NEWGAME.Render(screen);
				st_MAINMENU_NETWORK.Show();
				st_MAINMENU_NETWORK.Render(screen);
				st_MAINMENU_OPTIONS.Show();
				st_MAINMENU_OPTIONS.Render(screen);
				st_MAINMENU_HELP.Show();
				st_MAINMENU_HELP.Render(screen);
				st_MAINMENU_EXIT.Show();
				st_MAINMENU_EXIT.Render(screen);
				
				
			}
			if(nMenu == 2){
				st_NEWGAME_HOW_MUCH_KI.Show();
				st_NEWGAME_HOW_MUCH_KI.Render(screen);
				st_NEWGAME_ONE.Show();
				st_NEWGAME_ONE.Render(screen);
				st_NEWGAME_TWO.Show();
				st_NEWGAME_TWO.Render(screen);
				st_NEWGAME_THREE.Show();
				st_NEWGAME_THREE.Render(screen);
				
			}
		}	
		
		// Benutzer-Teil: Menüführung
		if(mup){
			// Beenden?
			if(st_MAINMENU_EXIT.hit(mausx, mausy)){
				done = 1;
		
				
			}
			// Neues Spiel
			if(st_MAINMENU_NEWGAME.hit(mausx, mausy)){ 
				//SDL_Delay(500);
				nMenu = 2;
				dontchangemenu = 1;
		
			}
			// Wieviele Computerspieler?
				// Einen
				if(st_NEWGAME_ONE.hit(mausx, mausy)){
					nMenu = 3;
					nCPlayers = 1;
					dontchangemenu = 1;
					
				}
				// Zwei
				if(st_NEWGAME_TWO.hit(mausx, mausy)){
					nMenu = 3;
					nCPlayers = 2;
					dontchangemenu = 1;
					
				}
				// Drei
				if(st_NEWGAME_THREE.hit(mausx, mausy)){
					nMenu = 3;
					nCPlayers = 3;
					dontchangemenu = 1;
					
				}
			// Ende: Wieviele PC-Spieler?
				mup = 0;

		}
		if(gamestart){
			Spiel.neustart();
			gamestart = 0;

		}
		
		SDL_Flip(screen);
	}
 
Zuletzt bearbeitet:
Huhu,

Nach langem rumfummeln hab ich denn herausgefunden, das ich einfach an Alzheimer leide. Ich habe schlicht und einfach vergessen, die Zeile

SDL_GetMouseState(&mausx, &mausy); // MAus-Coords ermitteln

vor

if(menu){

zu setzen. Jetzt tuts. Danke trotzdem ;-)

Grüße,

WR
 
Zurück