Menu
CoddyTech

Saydam Pikseller

Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 5 / 36.

Bir görüntü dosyası her zaman bir dikdörtgendir, ancak bir düşman gemisi öyle değildir. Çevresindeki pikseller şeffaftır: PNG'deki her pikselin, 0'dan (şeffaf) 255'e (opak) kadar değer alan dördüncü bir sayısı, yani alfa değeri vardır.

Başlangıç dosyası, üç düşmanı alfa değerini atan convert() ile yükler: şeffaf her piksel siyaha dönüşür ve her düşman siyah bir kutunun içinde kalır. convert_alpha() alfa değerini korur; böylece pencereyi yalnızca opak pikseller kaplar. Düz bir dikdörtgen olmayan her şey için bunu kullan.

Rect hâlâ dikdörtgenin tamamını kapsar. Resmin kapladığı kutuyu görmek için dış çizgisini çiz:

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

Son sayı olan 1, Rect'i doldurmak yerine 1 piksellik bir dış çizgi çizer. Dış çizgi ile gemi arasındaki boşluklara bak. İki Rect, içlerindeki resimler birbirine değmediği hâlde üst üste gelebilir ve Rect'lerle yapılan çarpışma testi yine de çarpıştıklarını söyler. 5. bölüm bunu çözüyor.

challenge icon

Görev

Kolay
  1. Siyah kutuların kaybolması için üç düşmanı .convert() yerine .convert_alpha() ile yükle.
  2. Her düşmanın Rect'ini (90, 90, 120) renginde, 1 piksel kalınlığında çerçevele. Düşmanlar (128, 200), (288, 200) ve (448, 200) konumlarında kalır.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Sprite'lar ve Görseller bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground