Bir Alt Sınıf
Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 15 / 36.
Bazı düşmanlar zikzak çizmelidir. Diğerleri gibi düşerler ve ayrıca yana doğru kayarak pencerenin kenarlarında yön değiştirirler. Bir yöntemi değiştirmek için Enemy sınıfının tamamını kopyalamak, her hatayı iki kez düzeltmek anlamına gelir. Bir alt sınıf, üst sınıfındaki her şeyi devralır ve yalnızca farklı olanı değiştirir:
class Zigzag(Enemy):
def __init__(self, image, x, y):
super().__init__(image, x, y)
self.dx = 3
def update(self):
super().update()
self.rect.x += self.dx
if self.rect.left < 0 or self.rect.right > 640:
self.dx = -self.dxclass Zigzag(Enemy), Zigzag'ın bir Enemy olduğu anlamına gelir. Kendi kodunu yazmadan draw yöntemine sahip olur. Kendine ait update yöntemi, üst sınıfınkini geçersiz kılar ve super().update() önce üst sınıfın sürümünü çalıştırır; böylece düşme ve en üste dönme işlemleri iki kez yazılmaz. super().__init__(...) kurulum için de aynı şeyi yapar.
Bir Zigzag, diğerleriyle aynı listeye eklenir: döngü enemy.update() çağrısını yapar ve her nesne kendi türüne ait güncelleme yöntemini çalıştırır.
Görev
Ortaclass Zigzag(Enemy)yaz:__init__,super().__init__(image, x, y)çağırır veself.dx = 3değerini atar.update,super().update()çağırır,self.dxdeğeriniself.rect.xdeğerine ekler ve Rect sol veya sağ kenardan taştığındaself.dxişaretini tersine çevirir.enemiesiçindeki sarı düşmanı Zigzag yap; kırmızı ve yeşil Enemy olarak kalsın.
Kendin dene
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)
enemies = [Enemy(red, 160, 100), Enemy(green, 320, 100), Enemy(yellow, 480, 100)]
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for enemy in enemies:
enemy.update()
screen.fill((20, 22, 40))
for enemy in enemies:
enemy.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
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
4Sprite'lar ve Gruplar
Sprite SınıfıGruplarkill() ile Kaldırmaspritecollide ile YakalamaGruba Karşı Grup2Döndür, Yansıt, Ölçekle
Merkez Etrafında DöndürUçtuğun Yöne DönBir Görseli ÖlçekleOrijinalinden Döndür5Piksel Hassasiyetinde Çarpışmalar
Dikdörtgenler Haksız HissettiriyorMaskelerPiksel Hassasiyetinde Sprite'larDaire Hitbox'ları3Oyun Nesneleri için Sınıflar
İlk SınıfınızMetotlarSelf Nesnenin KendisidirNesneler ListesiGörselli NesnelerBir Alt Sınıf6Sprite Sheet'lerden Animasyon
Bir Sprite Sheet'i KesmekBir Kare SayacıZamanla AnimasyonTek Seferlik Bir PatlamaKendi başına pratik yap: Pygame playground