Seite 1 von 1

SDL - Event geben immer 0 zurück

Verfasst: 02.04.2011 17:34
von FosJonas
Da unter Linux MouseX und MouseY nicht funktionieren habe ich mir hier im Forum mal ein paar Beispiele zur lösung mittels SDL angeschaut.
Allerdings bekomme ich es irgendwie nicht hin. (weder mit Mouse noch mit Keyboard)

Code: Alles auswählen

InitSprite()
OpenScreen(1440,900,32,"Test")
SDL_Init_(#SDL_INIT_VIDEO|#SDL_INIT_AUDIO)

Procedure KeyDown(Key)
  SDL_PollEvent_(@Event.SDL_Event)
  If Event\key\type=#SDL_KEYDOWN
     If Event\key\keysym\sym=Taste
       ProcedureReturn 1
     EndIf
   EndIf
   ProcedureReturn 0
EndProcedure

T1 = ElapsedMilliseconds()
Repeat
  
  T2 = ElapsedMilliseconds()
Until T2-T1 > 2000 Or KeyDown(#SDLK_ESCAPE)
Dies ist der Simple code den ich dafür nutze, das problem:
Event\key\type und Event\key\keysym\sym geben immer 0 zurück egal wie bekloppt ich auf der Tastatur rumhämmere.
Was mir auch aufgefallen ist: SDL_PollEvent_(@Event.SDL_Event) gibt nur beim ersten aufrufen eine 1 zurück, ansonsten auch immer 0.
Ich sehe einfach keinen Fehler, gibt es etwas spezielles was ich noch beachten muss?

Danke im vorraus.

Re: SDL - Event geben immer 0 zurück

Verfasst: 02.04.2011 18:48
von MarkusOhm

Code: Alles auswählen

InitSprite()
OpenScreen(800,600,32,"Test")
If SDL_Init_(#SDL_INIT_VIDEO|#SDL_INIT_AUDIO)<0; abfrage ob SDL initialisiert wurde
  MessageRequester("Achtung" , " SDL not found",0)
  End
 EndIf

Global Event.SDL_Event; bitte Event initialisieren nicht vergessen

Procedure.b KeyDown(Taste.i) ; hier mal meine KeyProcedure
        SDL_PollEvent_(@Event.SDL_Event)
    If Event\key\type=#SDL_KEYDOWN
      If Event\key\keysym\sym=Taste
        ProcedureReturn 1 ; Taste wurde gedrückt
      Else
        ProcedureReturn -1 ; Taste wurde nicht gedrückt
      EndIf
   Else
     ProcedureReturn-1 ; es gibt kein KeyDownEvent
   EndIf
EndProcedure

T1 = ElapsedMilliseconds()
Repeat
  ClearScreen(RGB(0,0,0)) ; einmal Schwarz bitte
  FlipBuffers() ; Ein Flip Buffers muss enthalten sein damit SDL arbeiten kann
  
  T2 = ElapsedMilliseconds()

Until T2-T1 > 2000 Or KeyDown(#SDLK_ESCAPE)=1
;//Edit "=1" hinzugefügt

So ich habe dein Beispiel zum laufen gebracht und meine Änderungen dokumentiert

PS Referenz: Alter Beitrag

//Edit entweder bei der Procedure mit den Rückgaben #True und #False arbeiten oder Rückgabewert prüfen. (Hatte meinen alten Code leider nicht Dokumentiert :coderselixir: )

Re: SDL - Event geben immer 0 zurück

Verfasst: 03.04.2011 10:22
von FosJonas
Danke für deine schnelle Antwort,

Jetzt funktioniert alles, habe das ganze auch auf deinem alten beisspiel aufgebaut. Dachte das man den ganzen kram mit Flippbuffers und Procedurereturn -1 nicht braucht, scheine ich mich wohl geirrt zu haben.

Dann mach ich mich jetzt mal dran die Maus zum laufen zu bekommen.