You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame中WindowResized、WindowSizeChanged与VIDEORESIZE事件差异及选型

Pygame窗口缩放事件选择:VIDEORESIZE vs WINDOWRESIZED vs WINDOWSIZECHANGED

事件文档信息

根据Pygame官方文档:

  • VIDEORESIZE(遗留事件)

    描述:用户调整窗口尺寸时触发。
    属性:size、w、h,提供新尺寸。
    官方明确标注为“遗留”,推荐使用新的WINDOWEVENT体系。

  • WINDOWRESIZED

    描述:窗口已调整大小。
    属性:x、y、window,其中x/y对应新窗口的宽/高。

  • WINDOWSIZECHANGED

    描述:窗口尺寸已更改。
    属性:x、y、window,x/y对应新窗口的宽/高。

测试情况

为验证事件触发逻辑,编写了最小测试代码:

import pygame

pygame.init()
window = pygame.display.set_mode((1200, 900), pygame.RESIZABLE)
pygame.display.set_caption("Minimal Example")
clock = pygame.time.Clock()

running = True
while running:
    clock.tick(2)  # 降低帧率避免事件过多
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        print(event)  # 输出触发的事件
    pygame.display.update()

pygame.quit()

测试输出示例:

<Event(32778-WindowResized {'x': 994, 'y': 661, 'window': None})> 
<Event(32779-WindowSizeChanged {'x': 994, 'y': 661, 'window': None})> 
<Event(32769-VideoResize {'size': (994, 661), 'w': 994, 'h': 661})> 
<Event(32778-WindowResized {'x': 994, 'y': 661, 'window': None})>

测试发现:

  • 三个事件提供的宽高值完全一致,window属性在单窗口场景下无实际值。
  • 鼠标拖动调整窗口时,WINDOWRESIZED会多次触发;键盘分屏调整时,所有事件都会触发,且WINDOWRESIZED仅触发一次。

核心差异与使用建议

事件本质区别

  1. VIDEORESIZE:旧版事件体系的产物,仅响应用户手动调整窗口的动作,虽然属性直接易用,但官方已标记为遗留,后续版本存在兼容性风险,不推荐长期使用。
  2. WINDOWRESIZED:新版窗口事件,主要触发场景是用户主动完成窗口调整动作(比如松开鼠标、完成分屏),但拖动过程中系统的中间状态也会触发该事件,导致多次触发。
  3. WINDOWSIZECHANGED:更底层的事件,任何导致窗口尺寸变化的场景都会触发——包括用户手动调整、代码动态修改窗口大小、系统自动调整(如主题变更导致边框尺寸变化)等。

实际选择建议

  • 若仅需响应用户手动调整窗口的需求,优先选WINDOWRESIZED,符合官方推荐的新事件体系,未来兼容性更好。针对多次触发的问题,可以通过记录上一次窗口尺寸,对比后再执行缩放逻辑来避免重复操作:
    last_size = window.get_size()
    # 在事件循环内
    if event.type == pygame.WINDOWRESIZED:
        new_size = (event.x, event.y)
        if new_size != last_size:
            last_size = new_size
            # 执行精灵缩放逻辑
    
  • 若需要监听所有可能改变窗口尺寸的场景(比如代码动态调整窗口),则选择WINDOWSIZECHANGED。
  • 尽量避免使用VIDEORESIZE,尽管现有教程仍在使用,但官方已明确不推荐,后续版本可能被移除或修改行为。

内容的提问来源于stack exchange,提问作者WeCanDoItGuys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:05:04