web-dev-qa-db-fra.com

Dessine un rectangle transparent en pygame

Comment puis-je dessiner un rectangle qui a une couleur avec un alpha? J'ai:

windowSurface = pygame.display.set_mode((1000, 750), pygame.DOUBLEBUF)
pygame.draw.rect(windowSurface, pygame.Color(255, 255, 255, 128), pygame.Rect(0, 0, 1000, 750))

Mais je veux que le rectangle blanc soit transparent à 50%, mais la valeur alpha ne semble pas fonctionner.

25
John Stimac

Les fonctions pygame.draw ne dessineront pas avec alpha. La documentation dit:

La plupart des arguments acceptent un argument de couleur qui est un triplet RGB. Ceux-ci peuvent également accepter un quadruplet RGBA. La valeur alpha sera écrite directement dans la surface si elle contient des pixels alphas, mais la fonction de dessin ne dessine pas de manière transparente.

Ce que vous pouvez faire est de créer une seconde surface, puis de l’écrire à l’écran. Blitting fera le mélange alpha et les clés de couleur. En outre, vous pouvez spécifier un alpha au niveau de la surface (plus rapide et moins mémoire) ou au niveau des pixels (plus lent mais plus précis). Vous pouvez faire soit:

s = pygame.Surface((1000,750))  # the size of your rect
s.set_alpha(128)                # alpha level
s.fill((255,255,255))           # this fills the entire surface
windowSurface.blit(s, (0,0))    # (0,0) are the top-left coordinates

ou,

s = pygame.Surface((1000,750), pygame.SRCALPHA)   # per-pixel alpha
s.fill((255,255,255,128))                         # notice the alpha value in the color
windowSurface.blit(s, (0,0))

Gardez à l'esprit que, dans le premier cas, tout ce que vous dessinez dans s sera corrigé avec la valeur alpha spécifiée. Donc, si vous utilisez ceci pour dessiner des contrôles de superposition, par exemple, vous feriez mieux d'utiliser la deuxième alternative.

Pensez également à utiliser pygame.HWSURFACE pour créer la surface à accélération matérielle.

Consultez les Documents de surface sur le site pygame, en particulier l’intro.

43
Gustavo Giráldez

le mieux que je puisse faire pour vous aider est de vous montrer comment dessiner un rectangle qui n'est pas rempli .. La ligne pour le rectangle est:

pygame.draw.rect(surface, [255, 0, 0], [50, 50, 90, 180], 1)

le "1" signifie qu'il n'est pas rempli

0
l. zhang

Pour ce faire, au lieu de dessiner un rectangle avec pygame, vous pouvez créer l'image d'un rectangle transparent à l'aide d'un programme de dessin tel que Paint.net ou Fire Alpaca.

0
Sheepy