pygame.MOUSEBUTTONDOWN pygame.VIDEORESIZE错误?

2 投票
1 回答
2864 浏览
提问于 2025-04-17 03:06

几天前我问过一个类似的问题,但这次我把问题说得更清楚了:当我在同一个事件循环中同时处理鼠标按下(MOUSEBUTTONDOWN)和窗口调整大小(VIDEORESIZE)时,它就不正常工作了……当我按下鼠标时,它还会打印出本来应该在鼠标抬起(MOUSEBUTTONUP)事件发生时才打印的内容……你们自己试试,这个问题让我很头疼。

import pygame
from pygame.locals import *
from sys import exit

LEFT = 1
size = 520,630
running = 1
screen = pygame.display.set_mode(size, RESIZABLE, 32)
#screen = pygame.display.set_mode((size))
while running:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = 0
    if event.type == pygame.VIDEORESIZE:
      size = event.size
      pygame.display.set_caption("Window resized to "+str(event.size)) 
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT:
       print "You pressed the left mouse button at (%d, %d)" % event.pos
    if event.type == pygame.MOUSEBUTTONUP and event.button == LEFT:
       print "You released the left mouse button at (%d, %d)" % event.pos

    screen = pygame.display.set_mode(size, RESIZABLE, 32)
    screen.fill((0, 0, 0))
    pygame.display.flip()

1 个回答

0

不要在每个事件发生时都更新屏幕,这样会让你的程序变得非常慢。在我的电脑上,这样做让我根本无法理解鼠标事件。只需稍微调整一下你的代码,就能解决这个问题,程序就能正常运行了。

import pygame
from pygame.locals import *
from sys import exit

LEFT = 1
size = 520,630
running = 1
screen = pygame.display.set_mode(size, RESIZABLE, 32)
while running:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = 0
    if event.type == pygame.VIDEORESIZE:
      size = event.size
      pygame.display.set_caption("Window resized to "+str(event.size)) 
      screen.fill((0, 0, 0))
      pygame.display.flip()
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT:
       print "You pressed the left mouse button at (%d, %d)" % event.pos
    if event.type == pygame.MOUSEBUTTONUP and event.button == LEFT:
       print "You released the left mouse button at (%d, %d)" % event.pos

撰写回答