subclass
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 15 dari 36.
Beberapa musuh sebaiknya bergerak zigzag. Mereka jatuh seperti musuh lainnya dan juga bergeser ke samping, berbalik arah di tepi jendela. Menyalin seluruh class Enemy hanya untuk mengubah satu method berarti kamu harus memperbaiki setiap bug dua kali. Subclass mengambil semua hal dari parent-nya dan hanya mengubah bagian yang berbeda:
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) berarti Zigzag adalah Enemy. Zigzag memiliki draw tanpa perlu menuliskannya. update miliknya menggantikan milik parent, dan super().update() menjalankan versi parent terlebih dahulu, jadi gerakan jatuh dan kembali ke atas tidak ditulis dua kali. super().__init__(...) melakukan hal yang sama untuk penyiapan.
Zigzag masuk ke list yang sama dengan musuh lainnya: perulangan memanggil enemy.update() dan setiap object menjalankan jenis update-nya sendiri.
Tantangan
Sedang- Tulis
class Zigzag(Enemy):__init__-nya memanggilsuper().__init__(image, x, y)dan menetapkanself.dx = 3. update-nya memanggilsuper().update(), menambahkanself.dxkeself.rect.x, dan membalik tandaself.dxsaat Rect melewati tepi kiri atau kanan.- Jadikan musuh kuning dalam
enemiessebagai Zigzag. Musuh merah dan hijau tetap Enemy.
Coba sendiri
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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Sprite dan Gambar
2Putar, Cerminkan, Ubah Skala
Putar Mengelilingi Titik TengahHadap ke Arah TerbangmuUbah Skala GambarPutar dari Gambar Asli3class untuk object game
class pertamamumethodself adalah objectlist berisi objectobject dengan gambarsubclass6Animasi dari Sprite Sheet
Memotong Sprite SheetPenghitung FrameMenganimasikan dengan WaktuLedakan Sekali JalanLatihan sendiri: Playground Pygame