Du bist nicht angemeldet.

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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

23.05.2009, 17:34

mehrmals SDL_PollEvent aurufen.

Kann ich irget wie mehrmal das SDL_PollEvent aufrufen, um mehr mal die Events zu verarbeiten,

Quellcode

1
2
3
4
5
6
7
8
9
10
11
while( SDL_PollEvent( &event ) ) {
      if(event.type == SDL_QUIT)
        //mach was
}
//[...]
while(SDL_PollEvent(&event)){
       if(event.key.keysym.sym == SDLK_SPACE){
            if(event.key.state == SDL_PRESSED)
               //mach was
        }
   }

Bei der 2. schleife Funktionirt was nicht mehr.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

23.05.2009, 17:39

Hintereinander macht das keinen Sinn, da du ja alle Events rausholst..

Benutz doch einfach die gefüllte Varible event ein zweites mal..

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

3

23.05.2009, 17:41

Also ich bin auch noch anfänger mit SDL, aber vom rein logischen her, sollte man die Tasten und auch alles andere in einer Schleife abhandeln.

Wenn es doch gehen sollte, musst du warscheinlich eine zweite Variable vom Typ SDL_Event deklarieren, auch wenn ich den Sinn deiner Handlung nicht verstehe.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

23.05.2009, 18:01

Nene, das stimmt schon, wenn er das mit einer Schleife abfrägt, nur macht er das so lange, wie Nachrichten vorhanden sind und wenn er somit aus der Schleife kommt hat es folglich keine mehr drinn und somit macht ein zweites pollen kurz danach nicht viel Sinn, da wenn überhaupt nicht nocheinmal dieselben Ereignisse drin sind.

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

5

23.05.2009, 18:49

Naja, aber ich kann doch alles in einer Schleife abfragen oder nicht?

Ich frage einfach ab welche Taste gedrückt wurde und übermittel nebenher noch die Zeit, damit es auf jeden Rechner gleich läuft und übergebe dann meiner Klasse z.b. Player, der Funktion Move einfach die Zeit als Parameter.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

6

23.05.2009, 18:50

Kann ich den nicht irget wie alle Ereignise in ein SDL_Event speichern, und diese dann bieligig auslesen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

24.05.2009, 13:20

Zitat von »"kiba"«

Kann ich den nicht irget wie alle Ereignise in ein SDL_Event speichern, und diese dann bieligig auslesen.


Löscht denn PollEvent die restlichen Events raus, wenn du das erneut übergibst? - Wenn ja, musst du dir da wohl selber etwas bauen. Sollte nicht so schwer sein. Ein paar mal kopieren, ein paar Abfragen und das sollte gehen..

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

8

24.05.2009, 15:15

Hab noch ne Funktion gefunden.
int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action, Uint32 mask);

Mit SDL_PeepEvents hol ich die Events raus und mit den flag SDL_PEEKEVENT wird nichts gelöscht.
Als Rückgabe wert liefert er die Anzahl der Events.
Und da nichts gelöscht wird gehe ich davon aus das die Anzahl gleich bleibt.
Jetzt war ich mir aber unsicher was ich bei numevents für ein parameter nehmen soll.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void updateInput(){
  SDL_PumpEvents();
}
bool getPressKey(SDLKey key){
 SDL_Event event;
 int num = SDL_PeepEvents(&event,1,SDL_PEEKEVENT,SDL_ALLEVENTS);
    int i = 0;
    while(i <= num){
       if(event.key.keysym.sym == key){
            if(event.key.state == SDL_PRESSED)
                return true;
            else
                return false;
        }
        SDL_PeepEvents(&event,1,SDL_PEEKEVENT,SDL_ALLEVENTS);
        i++;
   }
   return false;
}

Aber die Funktion funktionirt nicht, wenn ich was abfrage kommt false dabei raus.

Werbeanzeige