这是一个简单的示例,它在最小/最大边界被打破时更改屏幕尺寸:
#imports
import pygame
from pygame.locals import *
pygame.init()
#bounds definition
STARTWIDTH, STARTHEIGHT = 200, 200
MAXWIDTH, MAXHEIGHT = 200, 200
MINWIDTH, MINHEIGHT = 200, 200
#variables
screen = pygame.display.set_mode((STARTWIDTH, STARTHEIGHT), RESIZABLE)
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == VIDEORESIZE:
width = min(MAXWIDTH, max(MINWIDTH, event.w))
height = min(MAXHEIGHT, max(MINHEIGHT, event.h))
if (width, height) != event.size:
screen = pygame.display.set_mode((width, height), RESIZABLE)
screen.fill((255,255,255))
pygame.display.update()
pygame.quit()
VIDEORESIZE 事件,顾名思义,总是在屏幕尺寸改变时释放。因此,当它被释放时,我们要检查用户是否仍在边界内,如果没有,则重置其大小。
它具有三个属性:w、h和size。 w 和 h 属性分别包含调整大小后的窗口高度和宽度。 size 属性是(width, height) 的元组。
引发此事件时,我们当然要检查用户是否留在我们的范围内。我们使用 min 和 max 函数来做到这一点。我们使用max(MINWIDTH, event.w)来判断高度是否不在最大宽度之下,因为如果宽度小于MINWIDTH,将返回MINWIDTH。否则,将返回宽度本身。然后我们对该结果和 max 函数做类似的事情来确定窗口是否不是太大。然后我们重复高度的整个过程。
然后我们检查生成的新尺寸是否与旧尺寸不同。如果是,则意味着最小/最大界限被打破,我们需要使用pygame.display.set_mode调整大小。如果不是,这意味着我们可以继续,因为新的大小仍在其范围内。