Der Code ist für den MouseX() und MouseY() "Bug" ab PureBasic 4.3+ geschrieben worden
Wichtig gemeint ist der Bug für MouseX() und MouseY() im zusammenhang mit Screen die Rückgabe war immer 0.
Auf Ubuntu "Koala" auch nicht auch hier war im Screen die Rückgabe sowohl bei MousX() als auch bei MouseDeltaX() die Rückgabe immer 0.
auch Locate() hatte keine Wirkung.
Bitte beachtet das dann auch die Tastaturabfrage über SDL erfolgen muss.(linux[Eingebunden])
(für Windows als Gegenstück damit man nicht den ganzen Code umschreiben muss bei zwei Systemen)
Code: Alles auswählen
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
;---Linux--
#Ohm_Key_Escape=#SDLK_ESCAPE
;---F_Tasten--
#Ohm_Key_F1=#SDLK_F1
#Ohm_Key_F2=#SDLK_F2
#Ohm_Key_F3=#SDLK_F3
#Ohm_Key_F4=#SDLK_F4
#Ohm_Key_F5=#SDLK_F5
#Ohm_Key_F6=#SDLK_F6
#Ohm_Key_F7=#SDLK_F7
#Ohm_Key_F8=#SDLK_F8
#Ohm_Key_F9=#SDLK_F9
#Ohm_Key_F10=#SDLK_F10
#Ohm_Key_F11=#SDLK_F11
#Ohm_Key_F12=#SDLK_F12
;--Nummern--
#Ohm_Key_1=#SDLK_1
#Ohm_Key_2=#SDLK_2
#Ohm_Key_3=#SDLK_3
#Ohm_Key_4=#SDLK_4
#Ohm_Key_5=#SDLK_5
#Ohm_Key_6=#SDLK_6
#Ohm_Key_7=#SDLK_7
#Ohm_Key_8=#SDLK_8
#Ohm_Key_9=#SDLK_9
#Ohm_Key_0=#SDLK_0
;---Alphabet--
#Ohm_Key_Q=#SDLK_q
#Ohm_Key_W=#SDLK_w
#Ohm_Key_E=#SDLK_e
#Ohm_Key_R=#SDLK_r
#Ohm_Key_T=#SDLK_t
#Ohm_Key_Z=#SDLK_z
#Ohm_Key_U=#SDLK_u
#Ohm_Key_I=#SDLK_i
#Ohm_Key_O=#SDLK_o
#Ohm_Key_P=#SDLK_p
#Ohm_Key_A=#SDLK_a
#Ohm_Key_S=#SDLK_s
#Ohm_Key_D=#SDLK_d
#Ohm_Key_F=#SDLK_f
#Ohm_Key_G=#SDLK_g
#Ohm_Key_H=#SDLK_h
#Ohm_Key_J=#SDLK_j
#Ohm_Key_K=#SDLK_k
#Ohm_Key_L=#SDLK_l
#Ohm_Key_Y=#SDLK_y
#Ohm_Key_X=#SDLK_x
#Ohm_Key_C=#SDLK_c
#Ohm_Key_V=#SDLK_v
#Ohm_Key_B=#SDLK_b
#Ohm_Key_N=#SDLK_n
#Ohm_Key_M=#SDLK_m
;----Richtung-----
#Ohm_Key_Up=#SDLK_UP
#Ohm_Key_Down=#SDLK_DOWN
#Ohm_Key_Left=#SDLK_LEFT
#Ohm_Key_Right=#SDLK_RIGHT
#Ohm_Key_Space=#SDLK_SPACE
#Ohm_Key_LeftControl=#SDLK_LCTRL
#Ohm_Key_RightControl=#SDLK_RCTRL
#Ohm_Key_Delete=#SDLK_BACKSPACE
#Ohm_Key_Enter=#SDLK_RETURN
#Ohm_Key_Entfernen=#SDLK_DELETE
#Ohm_Key_Pause=#SDLK_PAUSE
#Ohm_Key_Komma=#SDLK_COMMA
#Ohm_Key_Minus=#SDLK_MINUS
#Ohm_Key_Plus=#SDLK_PLUS
;---Numpad-
#Ohm_NumPad_1=#SDLK_KP1
#Ohm_NumPad_2=#SDLK_KP2
#Ohm_NumPad_3=#SDLK_KP3
#Ohm_NumPad_4=#SDLK_KP4
#Ohm_NumPad_5=#SDLK_KP5
#Ohm_NumPad_6=#SDLK_KP6
#Ohm_NumPad_7=#SDLK_KP7
#Ohm_NumPad_8=#SDLK_KP8
#Ohm_NumPad_9=#SDLK_KP9
#Ohm_NumPad_0=#SDLK_KP0
#Ohm_NumPad_Enter=#SDLK_KP_ENTER
#Ohm_NumPad_Komma=#SDLK_KP_EQUALS
#Ohm_NumPad_Minus=#SDLK_KP_MINUS
#Ohm_NumPad_Plus=#SDLK_KP_PLUS
#Ohm_NumPad_Mal=#SDLK_KP_MULTIPLY
#Ohm_NumPad_Geteilt=#SDLK_KP_DIVIDE
CompilerCase #PB_OS_Windows_XP Or #PB_OS_Windows_7 Or #PB_OS_Windows_Vista
;---Windows--
#Ohm_Key_Escape=#PB_Key_Escape
;---F_Tasten--
#Ohm_Key_F1=#PB_Key_F1
#Ohm_Key_F2=#PB_Key_F2
#Ohm_Key_F3=#PB_Key_F3
#Ohm_Key_F4=#PB_Key_F4
#Ohm_Key_F5=#PB_Key_F5
#Ohm_Key_F6=#PB_Key_F6
#Ohm_Key_F7=#PB_Key_F7
#Ohm_Key_F8=#PB_Key_F8
#Ohm_Key_F9=#PB_Key_F9
#Ohm_Key_F10=#PB_Key_F10
#Ohm_Key_F11=#PB_Key_F11
#Ohm_Key_F12=#PB_Key_F12
;--Nummern--
#Ohm_Key_1=#PB_Key_1
#Ohm_Key_2=#PB_Key_2
#Ohm_Key_3=#PB_Key_3
#Ohm_Key_4=#PB_Key_4
#Ohm_Key_5=#PB_Key_5
#Ohm_Key_6=#PB_Key_6
#Ohm_Key_7=#PB_Key_7
#Ohm_Key_8=#PB_Key_8
#Ohm_Key_9=#PB_Key_9
#Ohm_Key_0=#PB_Key_0
;---Alphabet--
#Ohm_Key_Q=#PB_Key_Q
#Ohm_Key_W=#PB_Key_W
#Ohm_Key_E=#PB_Key_E
#Ohm_Key_R=#PB_Key_R
#Ohm_Key_T=#PB_Key_T
#Ohm_Key_Z=#PB_Key_Z
#Ohm_Key_U=#PB_Key_U
#Ohm_Key_I=#PB_Key_I
#Ohm_Key_O=#PB_Key_O
#Ohm_Key_P=#PB_Key_P
#Ohm_Key_A=#PB_Key_A
#Ohm_Key_S=#PB_Key_S
#Ohm_Key_D=#PB_Key_D
#Ohm_Key_F=#PB_Key_F
#Ohm_Key_G=#PB_Key_G
#Ohm_Key_H=#PB_Key_H
#Ohm_Key_J=#PB_Key_J
#Ohm_Key_K=#PB_Key_K
#Ohm_Key_L=#PB_Key_L
#Ohm_Key_Y=#PB_Key_Y
#Ohm_Key_X=#PB_Key_X
#Ohm_Key_C=#PB_Key_C
#Ohm_Key_V=#PB_Key_V
#Ohm_Key_B=#PB_Key_B
#Ohm_Key_N=#PB_Key_N
#Ohm_Key_M=#PB_Key_M
;----Richtung----
#Ohm_Key_Up=#PB_Key_Up
#Ohm_Key_Down=#PB_Key_Down
#Ohm_Key_Left=#PB_Key_Left
#Ohm_Key_Right=#PB_Key_Right
#Ohm_Key_Space=#PB_Key_Space
#Ohm_Key_LeftControl=#PB_Key_LeftControl
#Ohm_Key_RightControl=#PB_Key_RightControl
#Ohm_Key_Delete=#PB_Key_Back
#Ohm_Key_Enter=#PB_Key_Return
#Ohm_Key_Entfernen=#PB_Key_Delete
#Ohm_Key_Pause=#PB_Key_Pause
#Ohm_Key_Komma=#PB_Key_Comma
#Ohm_Key_Minus=#PB_Key_Minus
#Ohm_Key_Plus=#PB_Key_Capital
;---Numpad-
#Ohm_NumPad_1=#PB_Key_Pad1
#Ohm_NumPad_2=#PB_Key_Pad2
#Ohm_NumPad_3=#PB_Key_Pad3
#Ohm_NumPad_4=#PB_Key_Pad4
#Ohm_NumPad_5=#PB_Key_Pad5
#Ohm_NumPad_6=#PB_Key_Pad6
#Ohm_NumPad_7=#PB_Key_Pad7
#Ohm_NumPad_8=#PB_Key_Pad8
#Ohm_NumPad_9=#PB_Key_Pad9
#Ohm_NumPad_0=#PB_Key_Pad0
#Ohm_NumPad_Enter=#PB_Key_PadEnter
#Ohm_NumPad_Komma=#PB_Key_PadComma
#Ohm_NumPad_Minus=#PB_Key_Subtract
#Ohm_NumPad_Plus=#PB_Key_Add
#Ohm_NumPad_Mal=#PB_Key_Multiply
#Ohm_NumPad_Geteilt=#PB_Key_Divide
CompilerEndSelect
;-------Proceduren-Linux-Windows-----
;----OhmStudios----2009----------------
;---Zur-freien-Benutzung----------------
;-------PureBasic4.40beta5--------------
;-----Screen-ohne-OpenGL--------------
Global ExamiMauKey.b=0
CompilerSelect #PB_Compiler_OS
;--fuer_Linux_User-
CompilerCase #PB_OS_Linux
Structure ZweiAchsen
X.l
Y.l
EndStructure
Global Event.SDL_Event
Global EventMaus.ZweiAchsen
Procedure.b ScreenInit()
If SDL_Init_(#SDL_INIT_VIDEO|#SDL_INIT_AUDIO)<0
ProcedureReturn 0
Else
ProcedureReturn 1
EndIf
EndProcedure
Procedure.b Examiniere()
EndProcedure
Procedure.l MausBew_X()
Shared EventMaus
SDL_PollEvent_(@Event.SDL_Event)
If Event\motion\type=#SDL_MOUSEMOTION
EventMaus\X=Event\motion\x
EndIf
ProcedureReturn EventMaus\X
EndProcedure
Procedure.l MausBew_Y()
Shared EventMaus
SDL_PollEvent_(@Event.SDL_Event)
If Event\motion\type=#SDL_MOUSEMOTION
EventMaus\Y=Event\motion\y
EndIf
ProcedureReturn EventMaus\Y
EndProcedure
Procedure.b MausButton(Flag.l)
SDL_PollEvent_(@Event.SDL_Event)
If Flag=Event\button\Button And Event\button\type=#SDL_MOUSEBUTTONDOWN
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.b MausWheel()
SDL_PollEvent_(@Event.SDL_Event)
If Event\button\button=#SDL_BUTTON_WHEELDOWN And Event\button\type=#SDL_MOUSEBUTTONDOWN
ProcedureReturn -1
ElseIf Event\button\button=#SDL_BUTTON_WHEELUP And Event\button\type=#SDL_MOUSEBUTTONDOWN
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.b DruckTaste(Taste.i)
SDL_PollEvent_(@Event.SDL_Event)
If Event\key\type=#SDL_KEYDOWN
If Event\key\keysym\sym=Taste
ProcedureReturn 1
Else
ProcedureReturn -1
EndIf
Else
ProcedureReturn-1
EndIf
EndProcedure
Procedure BeendeMauKey()
SDL_Quit_()
EndProcedure
CompilerCase #PB_OS_Windows_XP Or #PB_OS_Windows_7 Or #PB_OS_Windows_Vista
;--fuer_windows_Nutzer-
Procedure.b ScreenInit()
If InitKeyboard()=0 Or InitMouse()=0
ProcedureReturn 0
Else
ProcedureReturn 1
EndIf
EndProcedure
Procedure.l Examiniere()
ExamiMauKey.b=4
ExamineKeyboard()
ExamineMouse()
EndProcedure
Procedure.l MausBew_X()
If ExamiMauKey.b<>4
ExamineMouse()
EndIf
reture.l=MouseX()
ProcedureReturn reture.l
EndProcedure
Procedure.l MausBew_Y()
If ExamiMauKey.b<>4
ExamineMouse()
EndIf
reture.l=MouseY()
ProcedureReturn reture.l
EndProcedure
Procedure.b MausButton(Flag.l)
If ExamiMauKey.b<>4
ExamineMouse()
EndIf
If MouseButton(Flag)=0
ProcedureReturn 0
Else
ProcedureReturn 1
EndIf
EndProcedure
Procedure.b MausWheel()
If ExamiMauKey.b<>4
ExamineMouse()
EndIf
If MouseWheel()>0
ProcedureReturn 1
ElseIf MouseWheel()<0
ProcedureReturn -1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.b DruckTaste(Taste.l)
If ExamiMauKey.b<>4
ExamineKeyboard()
EndIf
If 0=KeyboardPushed(Taste)
ProcedureReturn -1
Else
ProcedureReturn 1
EndIf
EndProcedure
Procedure BeendeMauKey()
EndProcedure
CompilerEndSelect
Am 5.2.10 einen Bug behoben...
Hilft der Code weiter?