pygame不进行blit操作,除非我调用pygame.event.get()函数。

3

在撞了两个小时的头后,我意识到:

display.blit(mypic, posx, posy)
pygame.display.update()

如果我不调用以下内容,它就无法正常工作(即屏幕上不会显示任何内容):

pygame.event.get()

这是地球上最奇怪的一种错误吗?还是我遗漏了什么?

我正在运行Python 2.7和Mac OS High Sierra上的Pygame,如果这是由于Pygame和Mac OS之间的兼容性问题引起的,那我也不会感到意外。

有关出错原因的任何提示吗?

示例代码:

import pygame
winWidth = 800
winHeight = 600
posx = 200; posy = 200
mypic = pygame.image.load("path_to_my_picture.jpg")
COL_BACKGROUND = (255,255,255)

DISPLAYSURF = pygame.display.set_mode((winWidth, winHeight))
pygame.init()
display.fill(COL_BACKGROUND)
display.blit(mypic, posx, posy)

# only including the following line it will blit the picture:
# pygame.event.get()

pygame.display.update()

请提供一个最小可运行示例 - skrx
1个回答

4

我不能百分之百确定它在 Mac 上的工作方式,但我假设它与 Windows 相似,如果您不经常调用 pygame.event.get(),操作系统会认为窗口已停止响应并不再更新它。

在 Pygame 文档的事件页面中提到了这一点,可以参考 pygame.event.pump()

对于游戏的每个帧,您都需要进行某种类型的事件队列调用。这可以确保您的程序可以在内部与其他操作系统交互。如果您没有在游戏中使用其他事件函数,则应调用 pygame.event.pump() 以允许 Pygame 处理内部操作。


但是这在pygame文档中有提到吗? - DaniPaniz
1
@DaniPaniz 我知道这是一个众所周知的问题,但我不确定文档中是否提到了,我会检查。 - Chachmu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接