【问题标题】:how to handle pygame VideoExpose event如何处理pygame VideoExpose事件
【发布时间】:2020-10-21 20:49:19
【问题描述】:

我正在尝试pygame,并注意到当我按下 alt+tab 并且窗口全屏时,它引发了 VideoExpose 事件。当我再次按 alt+tab 切换时,屏幕上的所有内容都会移动到左下角。 我知道这应该意味着“必须重绘窗口的某些部分”,但是我应该如何重绘它们,为什么pygame 甚至首先会出现这个事件?

【问题讨论】:

  • 你使用的是哪个版本的pygame?最近有一个 bug fix 包含在 2.0.0.dev16 中,它会影响虚假的 VIDEOEXPOSE 事件。
  • 我有 pygame 1.9.6,但我不在乎是否更新了 pygame 的版本。
  • 您可以使用pip install pygame --pre 试用最新的 pygame 预发布版本。如需针对您的具体问题的进一步帮助,您需要提供minimal reproducible example

标签: python pygame event-handling


【解决方案1】:

如果您正在编写使用窗口事件模型的程序,窗口环境会发送程序事件来通知它环境变化 - 窗口调整大小、鼠标移动、需要重新绘制等。

不处理这些事件将导致您的应用程序被环境视为“无响应”。在 SO 上,PyGame 每周大约有一个问题,正是这个问题。

使用 PyGame 重绘事件处理似乎是多余的,因为大多数 PyGame 游戏每帧重绘整个屏幕,例如:60 FPS。但是如果没有必要,这种方法完全是在浪费资源(CPU 时间、电力等)。虽然 很简单,但对初学者来说非常有用。

假设您正在编写像Solitaire 这样的纸牌游戏...屏幕更新在与用户交互时。在 CPU 方面,当用户考虑下一步行动时,99.9% 的时间它什么都不做。在这种情况下,可以编写程序以仅在必要时重新绘制屏幕。 什么时候有必要?当玩家给出输入,或程序从寡居环境接收到pygame.VIDEOEXPOSE 事件时。

如果您的程序不断地重绘窗口,您可以简单地忽略该消息。如果不是,则在接收消息时调用通常用于呈现窗口的任何代码块。显示消息可能会与需要重新绘制的屏幕区域一起出现,在这种情况下,一个非常好的应用程序只会更新显示的该部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多