Pygame. How do I resize a surface and keep all objects within proportionate to the new window size?

前端 未结 3 824
忘了有多久
忘了有多久 2021-01-13 08:14

If I set a pygame window to resizable and then click and drag on the border of the window the window will get larger but nothing blit onto the surface will get larger with i

3条回答
  •  轮回少年
    2021-01-13 08:56

    Don't draw on the screen directly, but on another surface. Then scale that other surface to size of the screen and blit it on the screen.

    Here's a simple example:

    import pygame
    from pygame.locals import *
    
    def main():
        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:
            for event in pygame.event.get():
                if event.type == QUIT: 
                    pygame.display.quit()
                elif event.type == VIDEORESIZE:
                    screen = pygame.display.set_mode(event.size, HWSURFACE|DOUBLEBUF|RESIZABLE)
    
            fake_screen.fill('black')
            fake_screen.blit(pic, (100, 100))
            screen.blit(pygame.transform.scale(fake_screen, screen.get_rect().size), (0, 0))
            pygame.display.flip()
        
    main()    
    

提交回复
热议问题