2014-12-05 2 views
2

Не понимаю, как достичь положения мыши, кроме как при прослушивании событий, но в том случае, когда очередь событий пуста, как это достигается?Как получить положение мыши с помощью PySDL2?

Документация pysdl for pygamers предлагает использовать sdl2.mouse.SDL_GetMouseState() (doc here), но эта функция actially требует х, у координаты курсора вы хотите спросить. Между тем, вызов 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) 

`

Смежные вопросы