当鼠标不移动时,Pygame的mouse.get_rel()返回值

时间:2017-12-10 02:04:05

标签: python pygame mouse

在我的程序pygame.mouse.get_rel()以及event.rel中返回元组,如(0,-1)或任何其他(1,0),(0,1),(1,1)即使鼠标不移动也是如此。 当我移动鼠标时,我得到正确的值,但当我再次停止它时返回其中一个元组(返回其中一个直到我移动鼠标,当我停止移动时,它开始随机返回其他元组并重复直到下一次鼠标移动)。 这让我的游戏无法播放。 以下是代码的重要部分:

import pygame
pygame.init()
game_display = pygame.display.set_mode((800,600))
pygame.mouse.set_visible(False)
pygame.event.set_grab(True)

game_exit = False

while not game_exit:
    mouse_move = (0,0)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        if event.type == pygame.MOUSEMOTION:
            print(event.rel) #returns (0, -1)
    if pygame.key.get_pressed()[pygame.K_ESCAPE]:
        game_exit = True

    print(pygame.mouse.get_rel()) #returns (0, -1)

pygame.quit()

编辑:我注意到删除了

pygame.mouse.set_visible(False)

pygame.event.set_grab(True)

解决了这个问题,但这两种方法都是必需的。

1 个答案:

答案 0 :(得分:0)

让我们看看如果我们用pygame.mouse.get_pos()和向量计算鼠标位置和偏移量会发生什么。检查此程序是否产生相同的错误:

import pygame
from pygame.math import Vector2

pygame.init()
game_display = pygame.display.set_mode((800,600))
pygame.mouse.set_visible(False)
pygame.event.set_grab(True)
clock = pygame.time.Clock()
game_exit = False

previous_pos = Vector2(pygame.mouse.get_pos())

while not game_exit:
    mouse_move = (0,0)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                game_exit = True

    current_pos = Vector2(pygame.mouse.get_pos())
    print(current_pos-previous_pos)
    previous_pos = current_pos
    clock.tick(3)  # 3 frames per second.

pygame.quit()