Pixels transparents
Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 5 sur 36.
Un fichier image est toujours un rectangle, mais un vaisseau ennemi ne l’est pas. Les pixels qui l’entourent sont transparents : chaque pixel d’un PNG possède un quatrième nombre, son alpha, compris entre 0 (transparent) et 255 (opaque).
Le projet de départ charge les trois ennemis avec convert(), qui supprime l’alpha : chaque pixel transparent devient noir, et chaque ennemi se retrouve dans un rectangle noir. convert_alpha() conserve l’alpha, de sorte que seuls les pixels opaques recouvrent la fenêtre. Utilise-le pour tout ce qui n’est pas un rectangle opaque.
Le Rect correspond toujours à tout le rectangle. Trace son contour pour voir la boîte occupée par l’image :
rect = red.get_rect(topleft=(128, 200))
screen.blit(red, rect)
pygame.draw.rect(screen, (90, 90, 120), rect, 1)Le dernier nombre, 1, trace le contour du Rect sur 1 pixel au lieu de le remplir. Observe les espaces entre le contour et le vaisseau. Deux Rects peuvent se chevaucher alors que les images qu’ils contiennent ne se touchent pas, et un test de collision avec des Rects indique quand même qu’ils se sont heurtés. Le chapitre 5 corrige cela.
Défi
Facile- Charge les trois ennemis avec
.convert_alpha()au lieu de.convert(), pour faire disparaître les boîtes noires. - Après chaque ennemi, trace le contour de son Rect en
(90, 90, 120), avec une épaisseur de 1 pixel. Les ennemis restent à(128, 200),(288, 200)et(448, 200).
Essayez vous-même
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Three Enemies")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert()
green = pygame.image.load("assets/images/enemy_green.png").convert()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(red, (128, 200))
screen.blit(green, (288, 200))
screen.blit(yellow, (448, 200))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Sprites et images
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents2Tourner, retourner, redimensionner
Faire pivoter autour du centreRegarder dans la direction du volRedimensionner une imagePivoter à partir de l’original5Collisions au pixel près
Les rectangles semblent injustesMasquesSprites au pixel prèsZones de collision circulaires3Les classes pour les objets du jeu
Votre première classeLes méthodesSelf est l’objetUne liste d’objetsDes objets avec des imagesUne sous-classe6Animation à partir de feuilles de sprites
Découper une feuille de spritesUn compteur de framesAnimer avec le tempsUne explosion à déclenchement uniqueEntraînez-vous par vous-même : Playground Pygame