Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
enum Spielzustand
{
menu,
game,
ende
}
|
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Spielzustand zustand = menu; while(zustand != ende) { while(zustand == menu) { if(Escape gedrückt) { zustand = ende; } if(Enter gedrückt) { zustand = ende; } } while(zustand == game) { // Spielcode } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
while(zustand!=ende){ while(zustand==menu) { while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_MOUSEBUTTONDOWN: {x2=event.motion.x; y2=event.motion.y; } break; case SDL_QUIT: zustand=ende; break; } } if(y2>=....) //Wenn also auf neues Spiel geklickt wird, wechselt der "zustand" { //evt. SDL_Delay(2000); klappt aber auch dann nicht while(zustand==spiel) { while(SDL_PollEvent(&event)) //Gleichzeitig ist hier eine Abfrage, die besagt, dass wenn { switch(event.type) { case SDL_MOUSEBUTTONDOWN: { x=event.motion.x; y=event.motion.y; } break; case SDL_QUIT: { zustand=ende; } break; } if(y>=....) //dann wird dies und dies Feld gefüllt, Problem dass das Feld beim Wechsel vom Zustand schon gefüllt wird } } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Daedra22« (27.05.2013, 14:33)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (27.05.2013, 14:55)
Uff, dass scheint mir etwas zu komplex für solch ein triviales problem.Noch schöner wäre es ja, wenn es so funktionieren würde wie gedacht. Soll heißen, pro Mausklick nur eine Eingabe. Dafür kannst du einerseits auf Mausrelease Events warten und erst dann die Aktion ausführen. Sobald die Maus also losgelassen wird, benutzt du die Eingabe. Noch schöner wäre es den Mausklick abzufragen. Soll heißen, das Event wird nur ein mal pro Mausklick gefeuert und nicht solange die Maus gedrückt wird. Du kannst gucken ob es bei SDL direkt ein Event dafür gibt, oder dir mit ein wenig Code selbst was basteln. Du kannst zum Beispiel eine Klasse für die Maus schreiben, welche weiß wie ihr Zustand diesen und den letzten Frame war. Damit kannst du Mausklicks dann nur ein einziges mal behandeln.
Ich habe mir nun die Lösung von Architekt ans Herz gelegt, nur leider funktioniert sie nur zum Teil. Die Abfrage nach last habe ich vor dem Wechsel des Menues.Einfach die Sekunden von SDL_GetTicks speichern int last = SDL_GetTicks(); und sobald SDL_GetTicks() > (last + 2000) empfängst du wieder Events.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Daedra22« (27.05.2013, 19:11)
Werbeanzeige