pygame的.如何调整曲面大小并使所有对象与新窗口大小成比例?

Rat*_*ial 4 python pygame surface blit resizable

如果我将pygame窗口设置为可调整大小,然后单击并拖动窗口的边框,窗口将变大,但表面上的任何blit都不会随之变大.(这是可以理解的)我怎么做到这样,当我调整窗口大小时,所有blit对象调整大小并正确填充窗口?

例如:假设我有一个200 x 200的窗口,我在window_width/2和window_height/2处按下了一个按钮.按钮将位于窗口的中心,为100 x 100.现在,如果我将窗口调整为300 x 300,则按钮将保持为100 x 100而不是150 x 150.

我试过搞乱pygame.Surface.get_width等,但没有运气.基本上我正在尝试调整程序窗口的大小,并使所有blit图像保持成比例.

slo*_*oth 6

不要直接在屏幕上绘图,而是在另一个表面上绘图.然后将其他表面缩放到屏幕大小并在屏幕上显示它.

这是一个简单的例子:

import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((200, 200),HWSURFACE|DOUBLEBUF|RESIZABLE)
fake_screen = screen.copy()
pic = pygame.surface.Surface((50, 50))
pic.fill((255, 100, 200))

while True:
    pygame.event.pump()
    event = pygame.event.wait()
    if event.type == QUIT: pygame.display.quit()
    elif event.type == VIDEORESIZE:
        screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)
        fake_screen.blit(pic, (100, 100))
        screen.blit(pygame.transform.scale(fake_screen, event.dict['size']), (0, 0))
        pygame.display.flip()
Run Code Online (Sandbox Code Playgroud)