除非我调用pygame.event.get(),否则pygame不会blit

时间:2018-01-25 19:22:35

标签: python macos event-handling pygame

将头撞到显示器上2小时后,我意识到:

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

不会起作用(即不会在屏幕上显示任何内容),除非我打电话:

pygame.event.get()

这是地球上最奇怪的虫子,还是我错过了什么?

我在python 2.7上运行pygame,mac os high sierra, 如果这是由于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()

1 个答案:

答案 0 :(得分:4)

我不是100%确定如何使用mac,但我假设它与Windows类似,如果你不定期调用pygame.event.get()操作系统认为窗口已经停止响应而且没有更新它。

Pygame文档的事件页面中的pygame.event.pump()下提到了这一点

  

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