SDL - Event geben immer 0 zurück

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
FosJonas
Beiträge: 121
Registriert: 12.11.2008 19:31

SDL - Event geben immer 0 zurück

Beitrag 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.
Purebasic 5.10 | Kubuntu 12.04 (64 bit) | Opera 12.01 | Nvidia GT 9800
Xubuntu 12.04 (64 bit) | Intel HD Graphis (Onboard)
Benutzeravatar
MarkusOhm
Beiträge: 46
Registriert: 16.08.2009 15:06
Computerausstattung: Asus EeePc 904HD 900MHz Intel-Graphik-Chip-915GM WindowsXP + UbuntuLucid

Re: SDL - Event geben immer 0 zurück

Beitrag 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: )
Zuletzt geändert von MarkusOhm am 05.04.2011 06:56, insgesamt 1-mal geändert.
Asus EeePc 904HD 900MHz Intel-Graphik-Chip-915GM WindowsXP + UbuntuLucid
Benutzeravatar
FosJonas
Beiträge: 121
Registriert: 12.11.2008 19:31

Re: SDL - Event geben immer 0 zurück

Beitrag 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.
Purebasic 5.10 | Kubuntu 12.04 (64 bit) | Opera 12.01 | Nvidia GT 9800
Xubuntu 12.04 (64 bit) | Intel HD Graphis (Onboard)
Antworten