如何在鼠标按钮在pygame中关闭时检查mousemotion(和方向)?

时间:2016-04-16 15:00:29

标签: python pygame mouse

我正在尝试检查鼠标左键移动时鼠标是否移动然后返回方向。我尝试在'while True'循环中检查鼠标位置两次,但这不起作用。这是我的代码:

import pygame
from pygame import*

while True:
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONUP:
            try:
                X, Y = pygame.mouse.get_pos()
                print(X,Y)  #just a check
                pygame.time.wait(20)
                try:
                    x, y = pygame.mouse.get_pos()
                    print(x,y)  #just a check
                    if x-X != 0 or y-Y != 0:
                        print('moved')
                        print(x-X, y-Y)

                    elif x-X == 0 and y-Y == 0:
                        print('not moved')
                except AttributeError:
                    pass
            except AttributeError:
                pass

但它始终没有感动。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你需要以另一种方式做,检查动作,然后按下按钮:

if event.type == pygame.MOUSEMOTION and event.buttons[0]:

答案 1 :(得分:0)

鼠标指针指示方向。

#!/usr/bin/env python3
import pygame

pygame.init()
width, height = 640, 480
display = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()

PRINT_MOUSE=True
USE_MOTION=True

mouse_pos=[(1,1),(2,2)]
#mouse meter
matrix = [
    [0,0,0],
    [0,0,0],
    [0,0,0]
]
def mdir(mouse_pos):
    global matrix
    #x+y
    if(mouse_pos[0][0] > mouse_pos[1][0]): #x right
        matrix[1][0]+=1
    if(mouse_pos[0][1] > mouse_pos[1][1]): #y down
        matrix[0][1]+=1
    if(mouse_pos[0][0] < mouse_pos[1][0]): #x left
        matrix[1][2]+=1
    if(mouse_pos[0][1] < mouse_pos[1][1]): #y up
        matrix[2][1]+=1
    #corners
    if(matrix[1][2] > 0 and matrix[2][1] > 0): #right down
        matrix[2][2]+=1
    if(matrix[1][2] > 0 and matrix[0][1] > 0): #right up
        matrix[0][2]+=1
    if(matrix[1][0] > 0 and matrix[2][1] > 0): #left down
        matrix[2][0]+=1
    if(matrix[1][0] > 0 and matrix[0][1] > 0): #left up
        matrix[0][0]+=1
    if(PRINT_MOUSE):    
        print(matrix[0])
        print(matrix[1])
        print(matrix[2])
        print("")
    reset_mouse()

def reset_mouse():
    #reset mouse meter
    global matrix
    matrix = [
        [0,0,0],
        [0,0,0],
        [0,0,0]
    ]

while True:
    
    pos=pygame.mouse.get_pos()
    if(len(mouse_pos) >= 3):
        mouse_pos.pop(0)
    else:
        mouse_pos.append(pos)
    if not USE_MOTION:    
        mdir(mouse_pos)
    
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit() 
            exit(0)
        if(USE_MOTION):
            if event.type == pygame.MOUSEMOTION:
                mdir(mouse_pos)        
    clock.tick(60)