Menu
CoddyTech

Transparente Pixel

Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 5 von 36.

Eine Bilddatei ist immer ein Rechteck, aber ein gegnerisches Raumschiff nicht. Die Pixel darum herum sind transparent: Jedes Pixel einer PNG-Datei hat eine vierte Zahl, seinen Alpha-Wert, von 0 (durchsichtig) bis 255 (undurchsichtig).

Das Starterprogramm lädt die drei Gegner mit convert(), wodurch der Alpha-Wert verworfen wird: Jedes durchsichtige Pixel wird schwarz, und jeder Gegner sitzt in einem schwarzen Kasten. convert_alpha() behält den Alpha-Wert bei, sodass nur die undurchsichtigen Pixel das Fenster bedecken. Verwende es für alles, was kein ausgefülltes Rechteck ist.

Das Rect ist weiterhin das gesamte Rechteck. Zeichne seinen Umriss, um zu sehen, wie viel Platz das Bild einnimmt:

rect = red.get_rect(topleft=(128, 200))
screen.blit(red, rect)
pygame.draw.rect(screen, (90, 90, 120), rect, 1)

Die letzte Zahl, 1, zeichnet einen 1 Pixel breiten Umriss, statt das Rect auszufüllen. Achte auf die Lücken zwischen dem Umriss und dem Raumschiff. Zwei Rects können sich überlappen, obwohl sich die Bilder darin nicht berühren, und ein Kollisionscheck mit Rects meldet trotzdem einen Treffer. Kapitel 5 behebt das.

challenge icon

Aufgabe

Einfach
  1. Lade die drei Gegner mit .convert_alpha() statt mit .convert(), damit die schwarzen Kästchen verschwinden.
  2. Umrande das Rect jedes Gegners mit (90, 90, 120), 1 Pixel breit. Die Gegner bleiben bei (128, 200), (288, 200) und (448, 200).

Probier es selbst

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()
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Sprites und Bilder

Übe selbstständig: Pygame-Playground