verstädnisproblem maus SDL event
-
Also ich habe folgenden Sachverhalt
ich habe in einem SDL_Surface screen verschiedene fonts
ich habe einmal einen rahmen reingeladen und 5 mal um die fonts gesetzt.
also einmal in den speicher geladen und an 5 verschiedene stellen gemalt.
jetzt wollt ich wenn ich in die pixel des rahmens(und zwischen den rahmen) klicke, das etwas passiert, eben das das Programm reagiert wie ein button.
Frage:
1. Es gibt nicht ein event, welches checkt ob der mausklick+pos auf der texture ist?
2. Die texture ist ja einmal vorhanden aber an 5 stellen, wie kriegt er alle 5 pos raus?
3. könnte man lösen indem man ein array für alle 5 texturen nimmt?
==========================
ok hab jetzt mal testweise versucht, nur meinen END button zu programmieren.
das hat aber nicht geklappt, und ich weiss nicht warum1. will ich das es nur reagiert wenn LINKER-Mausknopf gedrückt wird. Das Programm reagiert auch auch rechte maus taste
2. am anfang meiner
if(SDL_GetMouseState(&mouseX, &mouseY)&&SDL_BUTTON(1))
abrage habe ich einen breakpunkt, normalerweise müsste ich doch wenn ich einmal klicke, dann einmal in die if abrage reinkommen und wenn es durchgelaufen ist, dann müsste es weitergehen. tut es aber nicht. ich kann F5 sehr sehr oft drücken er bleibt ewig stehen.
3. Er muss aber rausspringen, denn ich kann im bild rumklicken
=========== wichtig ======================
4. jetzt hab ich folgendes problem. der "button" ist in der mitte unten. wenn ich links davon mich oben halte, kann ich wild rumklicken. wenn ich auf dem button oder über dem button ( sprich in der mitta aber oben ) klicke, dann beendet es sich auch////////////////////////
wie mache ich das? ich habe 5 buttons. alle 5 reagieren verschieden. kann ja einzeln programieren für jeden button, es muss doch ne bessere möglichkeit geben, oder?
hier ist der code für den end button, der wie gesagt auch ausgeführt wird wenn ich gar nicht drauf bin. und warum kann ich auch rechte maus drücken? und warum springt er immer in die if abfrage rein, obwohl es nur pro klick machen müsste?
//....... SDL_Event event; Uint8 *button; int mouseX, mouseY; bool done = false; while ( !done) { button = SDL_GetKeyState(NULL); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: done = true; break; } } if(button[SDLK_ESCAPE]) { done = true; } if(SDL_GetMouseState(&mouseX, &mouseY)&&SDL_BUTTON(1)) { SDL_Rect mousepos; mousepos.x = mouseX; mousepos.y = mouseY; //check for end button SDL_Rect tmp; tmp = bbbrect; // die x/y/w/h pos des end buttons int x_stop = (tmp.x + tmp.w); int y_stop = (tmp.y + tmp.h); for( tmp.x; tmp.x < x_stop; tmp.x++ ) { for( tmp.y; tmp.y < y_stop; tmp.y++) { if( tmp.y == mousepos.y) { done = true; return 1; break; } } if( tmp.x == mousepos.x || done == true) { done = true; return 1; break; } } } // ....
EDIT: das while hab ich am anfang der fkt gesetzt.
sprichmale fonts
checke for events ( maus/tasten )wenn ESC gedrückt wird gehts es weiter, wenn END gedrückt wird, geht es weiter
wenn "leere" stelle oder wenn die anderen 4 "buttons" gedrückt sind, soll er was machen.
jetzt habe ich testweise das WHILE nur für die tasten genommen. Ich kann auch gerne den ganzen code der fkt jemanden zuschicken, falls gewünscht