pygame : exemple de transparence
Voici un exemple simple pour gérer la transparence : cet exemple est très simple, il crée un petit carré qui suit la souris partout, et un autre « gros » carré qui apparait autour de la souris puis ne bouge plus, et dès que la souris sort de ce carré, hop, il fait un fondu au noir. Vous pouvez donc vous baser sur cet exemple pour comprendre comment transformer votre Surface en surface transparente destinée à être rapidement affichée à l’écran. Je parle de convert_alpha()
. Avec cet appel, pour vous donner une idée, le temps pris est presque 40 fois plus rapide que sans l’appel. Vous pouvez tester par vous même !
Attention !
Le plus important c’est de faire dans l’ordre :
self.image.set_alpha(valeur_transparence) pygame.Surface.convert_alpha(self.image)
Car l’ordre self.image.set_alpha(valeur_transparence)
fera créer un masque au complet, et ce n’est qu’après qu’il vous faudra convertir la totale via pygame.Surface.convert_alpha(self.image)
.
#!/usr/bin/env python # -*- coding: utf-8 -*- import os, pygame, sys, time, random, copy, pprint from pygame.locals import * class MySprite(pygame.sprite.Sprite): def __init__(self,width,height): # (!) Avant toute chose appeler le constructeur parent : pygame.sprite.Sprite.__init__(self) self.width = width self.height = height self.rect = pygame.Rect(0, 0, width, height) self.image = pygame.Surface( (self.rect.width, self.rect.height) ) self.image.set_colorkey((0,0,0)) self.image.fill((0, 0, 0)) class SMouse(MySprite): def __init__(self,width,height): MySprite.__init__(self,width,height) pygame.draw.rect(self.image, (205,250,130), self.rect, 5) self.image = self.image.convert() def update(self): self.rect.topleft = pygame.mouse.get_pos() class Contour(MySprite): def __init__(self,width,height,speed): MySprite.__init__(self,width,height) pygame.draw.rect(self.image, (105,250,230), self.rect, 5) self.fadeout = False self.speed = speed self.alpha = 250 self.done = False self.image.set_alpha(self.alpha) # Convertir en transparent : pygame.Surface.convert_alpha(self.image) def update(self): if not self.fadeout: if not self.rect.collidepoint( pygame.mouse.get_pos() ): self.fadeout = True else: self.alpha -= self.speed if self.alpha<0: self.alpha = 0 self.done = True self.image.set_alpha(self.alpha) def main(): pygame.init() pygame.mouse.set_visible(0) screen = pygame.display.set_mode( (0,0), pygame.FULLSCREEN | pygame.DOUBLEBUF | pygame.HWSURFACE ) if pygame.display.Info().bitsize < 24: print "This game needs a 24 bits display" pygame.quit() background = pygame.Surface(screen.get_size()) background = background.convert() background.fill((0, 0, 0)) screen.blit(background, (0, 0)) pygame.display.flip() clock = pygame.time.Clock() c = Contour(500, 500, 5) c.rect.center = pygame.mouse.get_pos() group_sprites = pygame.sprite.RenderPlain( [ SMouse(50, 50), c ] )
Bonjour, je suis nouveau sur pygame et je voudrais savoir s’il est possible de rendre la surface principale transparente, et pas les surfaces qu’on ajoute. Afin d’avoir une interface sous forme de widget en mettant le flag NOFRAME:
Cela n’a pas l’air de fonctionner (il ne devrait rien avoir a l’écran or je vois un carré noir sans bordure mais pas transparent
surface = pygame.display.set_mode((420, 180), NOFRAME, 32)
surface.set_alpha(5)
pygame.display.update()
Bonjour Sébastien,
Je n’ai pas touché Pygame depuis la date de cet article et j’ai appris tellement de choses entretemps que j’ai totalement oublié ce que je j’ai fait, je ne pourrais pas trop t’aider, j’en suis désolé…par contre j’espère que des personnes liront ta demande et répondront ici !
Vraiment désolé de ne pas pouvoir faire plus…