Je me demandais comment j'allais adapter la taille des images des projets pygame
à la résolution de l'écran. Par exemple, envisagez le scénario suivant en supposant pour le moment un mode d'affichage fenêtré; Je suppose que le plein écran sera le même:
J'ai un 1600x900
image d'arrière-plan qui s'affiche bien sûr de manière native dans un 1600x900
fenêtre
Dans un 1280x720
fenêtre Je peux évidemment juste redimensionner le rect de ces images à 1280x720
Que se passe-t-il cependant si je dois ajouter, disons un 300x300 px
image à x,y 1440,860
(exemples de tailles) dont la taille correspond à l'original 1600x900
Contexte? Bien sûr, pour le 1600x900
Je peux bien sûr utiliser l'image en mode natif mais qu'en est-il des tailles de fenêtre plus petites/plus grandes?
Fondamentalement, comment mettre les images à l'échelle de la taille de la fenêtre, puis les positionner en conséquence? Je suppose qu'il doit y avoir une méthode automatisée VRAIMENT facile, mais pour l'instant je ne peux pas le comprendre et franchement, je n'ai pas le temps de le rechercher ...
Merci d'avance, Ilmiont
Vous pouvez mettre l'image à l'échelle avec pygame.transform.scale
:
import pygame
picture = pygame.image.load(filename)
picture = pygame.transform.scale(picture, (1280, 720))
Vous pouvez ensuite obtenir le rectangle englobant de picture
avec
rect = picture.get_rect()
et déplacer l'image avec
rect = rect.move((x, y))
screen.blit(picture, rect)
où screen
a été défini avec quelque chose comme
screen = pygame.display.set_mode((1600, 900))
Pour permettre à vos widgets de s'adapter à différentes tailles d'écran, vous pouvez rendre l'affichage redimensionnable :
import os
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((500, 500), HWSURFACE | DOUBLEBUF | RESIZABLE)
pic = pygame.image.load("image.png")
screen.blit(pygame.transform.scale(pic, (500, 500)), (0, 0))
pygame.display.flip()
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)
screen.blit(pygame.transform.scale(pic, event.dict['size']), (0, 0))
pygame.display.flip()
Si vous mettez à l'échelle 1600x900 à 1280x720, vous avez
scale_x = 1280.0/1600
scale_y = 720.0/900
Que vous pouvez l'utiliser pour trouver la taille et la position du bouton
button_width = 300 * scale_x
button_height = 300 * scale_y
button_x = 1440 * scale_x
button_y = 860 * scale_y
Si vous modifiez 1280x720 à 1600x900, vous avez
scale_x = 1600.0/1280
scale_y = 900.0/720
et le repos est le même.
J'ajoute .0
à valeur pour faire float
- sinon scale_x
, scale_y
sera arrondi à integer
- dans cet exemple à 0
(zéro) (Python 2.x)