2016-01-20 1 views
3

Si je mets une fenêtre pygame à redimensionner puis que je clique et que je glisse sur la bordure de la fenêtre, la fenêtre grossira, mais rien de blanc sur la surface ne grossira avec. (Ce qui est compréhensible) Comment est-ce que je ferais en sorte que quand je redimensionne une fenêtre tous les objets blit redimensionnent avec et remplissent la fenêtre correctement?Pygame. Comment redimensionner une surface et conserver tous les objets proportionnellement à la nouvelle taille de la fenêtre?

Par exemple: Dites que j'ai une fenêtre de 200 x 200 et que je bloque un bouton à window_width/2 et window_height/2. Le bouton serait au centre de la fenêtre à 100 x 100. Maintenant, si je redimensionne la fenêtre à 300 x 300 le bouton reste à 100 x 100 au lieu de 150 x 150.

J'ai essayé de jouer avec pygame.Surface .get_width ect, mais n'a pas eu de chance. Fondamentalement, je suis en train d'essayer de redimensionner la fenêtre d'un programme et avoir toutes les images blit restent proportionnées.

Répondre

4

Ne dessinez pas sur l'écran directement, mais sur une autre surface. Ensuite, mettre à l'échelle cette autre surface à la taille de l'écran et le blit sur l'écran.

Voici un exemple simple:

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