2016-11-18 8 views
2

Я пишу небольшой Pygame сценарий, и мне нужно знать, если мышь оставил окно PygameDetect, если мышь оставил Pygame окно

Я не знаю, как еще объяснить. Это кажется простым, но я нигде не могу найти решение.

+0

вы попробовали событие 'pygame.MOUSEMOTION' с' event.pos'? – furas

+0

@furas MOUSEMOTION не скажет мне, если его * вне * экрана (нагативные значения), но он всегда захватывает 0s, что означает, что он, вероятно, также ловит maxes ... если он достоверно сообщает о крайних краях, я мог бы использовать что – AlgoRythm

ответ

4

pygame.mouse.focus() дает 0, когда мышь покидает окно (по крайней мере, в Linux)

#!/usr/bin/env python3 

import pygame 

pygame.init() 
screen = pygame.display.set_mode((800,600)) 

is_running = True 
while is_running: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      is_running = False 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       is_running = False 

    print(pygame.mouse.get_focused()) 

pygame.quit() 
0

Я сделал некоторые испытания ...

if not bool(game.mouse.get_focused()): 
    print("Mouse has left (Method 1)") 

и ...

elif event.type == game.MOUSEMOTION: 
    checkFocus(event, self.canvas) 

def checkFocus(e, display): 
    x, y = e.pos 
    MX, MY = display.get_size() 
    MX -= 1 # 0 - based 
    MY -= 1 
    if x <= 0 or y <= 0 or x >= MX or y >= MY: 
     print("Mouse has left (Method 2)") 

и метод 1 работал все время, в то время как метод 2 работал большую часть времени (особенно вокруг max X и d Ys [MX & MY])

Вот фактический журнал меня качается мышь вокруг, как маньяк ...

Mouse has left (Method 1) 
Mouse has left (Method 2) 
Mouse has left (Method 1) <-- 
Mouse has left (Method 1) <-- 
Mouse has left (Method 2) 
Mouse has left (Method 1) 

Как вы можете видеть, в этот короткий промежуток выборки, метод 1 работает более часто, чем метод два.

Спасибо всем, кто помог!

+0

Протестировано WIN10, кстати, так что это не просто вещь в Linux – AlgoRythm