pygame 中的 WindowResized、WindowSizeChanged 和 VideoResize 事件有什么区别?

问题描述 投票:0回答:1

当窗口变大或变小时,我想缩放精灵,我不确定在游戏循环中要注意哪个事件。

根据 pygame docs

VIDEORESIZE

描述:当用户调整窗口尺寸时发送。
属性:

size
w
h
给出新尺寸。

文档将其称为“遗留”事件并建议使用 WINDOWEVENT。

WINDOWRESIZED

描述:窗口大小已调整。 属性:

x
y
window

WINDOWSIZECHANGED

描述:窗口改变了大小。 属性:

x
y
window

使用其中一种比另一种有什么优势吗?他们之间有什么核心区别吗?


我做了一个最小的示例来查看调整窗口大小时发送的事件。

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) #small fps so not too many events flood in
    for event in pygame.event.get():
        if event.type==pygame.QUIT: running=False
        print(event) #output events that are sent
    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
仅在最后出现一次。

我在网上找到的调整大小的教程仍然倾向于使用

VIDEORESIZE
,并且我无法找到有关这些事件类型之间的差异的文章、讨论线程或文档。 有谁知道这些的内部代码,以及使用其中一个或另一个是否有任何区别?

python events pygame resize window-resize
1个回答
0
投票

WINDOWRESIZED
WINDOWSIZECHANGED
事件旨在用于
pygame._sdl2.video.Window
s
。您可以有多个窗口,并且必须知道事件来自哪个窗口。

© www.soinside.com 2019 - 2024. All rights reserved.