2014-12-05 36 views
2

除了聽事件之外,完全不瞭解如何獲得鼠標的位置,但是在事件隊列爲空的情況下,這是如何實現的?如何使用PySDL2獲取鼠標位置?

pysdl for pygamers文檔建議使用sdl2.mouse.SDL_GetMouseState()doc here),但此功能actially 需要的X,你要問關於光標的y座標。同時,調用sdl2.mouse.SDL_GetCursor()會返回一個遊標對象,但是我無法找到它的座標(即它只是包裝一個C對象,因此它有一個空的.__dict__屬性)。

我一直在嘗試我能想到的一切,但我從來沒有在C編程過。我想產生簡單的包裝函數就是:

def mouse_pos(self): 
      # ideally, just return <some.path.to.mouse_x_y> 
      event_queue = sdl2.SDL_PumpEvents() 
      state = sdl2.mouse.SDL_GetMouseState(None, None) # just returns 0, so I tried the next few lines 
      print state 
      for event in event_queue: 
       if event.type == sdl2.SDL_MOUSEMOTION: 
      # this works, except if the mouse hasn't moved yet, in which case it's none   
      return [event.x, event.y] 

回答

4

SDL_GetMouseState()是SDL2 C函數的包裝。因此您必須使用ctypes從中檢索值。原來的SDL2函數接收兩個指針(x和y)來存儲光標位置。

的片段下方會做正確的事情你:

import ctypes 
... 
x, y = ctypes.c_int(0), ctypes.c_int(0) # Create two ctypes values 
# Pass x and y as references (pointers) to SDL_GetMouseState() 
buttonstate = sdl2.mouse.SDL_GetMouseState(ctypes.byref(x), ctypes.byref(y)) 
# Print x and y as "native" ctypes values 
print(x, y) 
# Print x and y as Python values 
print(x.value, y.value) 

`