在我的程序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)
解决了这个问题,但这两种方法都是必需的。
答案 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()