2016-01-20 149 views
3

如果我将pygame窗口设置为可调整大小,然后单击并拖动窗口的边框,窗口将变大,但表面上没有任何blit会随着它变大。 (这是可以理解的)我怎样才能做到这一点,当我调整一个窗口的大小时,所有的窗口对象都会调整窗口大小并正确地填充窗口?Pygame。如何调整曲面大小并使所有对象与新窗口大小成比例?

例如:假设我有一个200 x 200的窗口,并在window_width/2和window_height/2处blit一个按钮。该按钮将在窗口的中心100 x 100.现在,如果我调整窗口的大小为300 x 300,按钮保持在100 x 100而不是150 x 150.

我试着用pygame搞乱.Surface .get_width等,但没有运气。 基本上我试图调整一个程序的窗口,并让所有的图像保持相称的图像。

回答

4

不要直接在屏幕上画画,而要在另一个表面上画画。然后将其他表面缩放至屏幕大小并将其粘贴在屏幕上。

这里有一个简单的例子:

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()