Menu
CoddyTech

Grup

Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 17 dari 36.

Sprite hadir dalam jumlah banyak: musuh, laser, koin. Group menampung banyak sprite dan melakukan hal yang sama pada semuanya:

enemies = pygame.sprite.Group()
for i in range(5):
    enemies.add(Enemy(64 + i * 128, 60))

Dua pemanggilan di dalam perulangan menggantikan perulangan yang kamu tulis pada list:

enemies.update()
enemies.draw(screen)

enemies.update() memanggil update() pada setiap sprite dalam group. enemies.draw(screen) melakukan blit pada self.image setiap sprite di posisi self.rect-nya: itulah sebabnya kedua nama tersebut harus tepat. Sprite dalam group tidak memerlukan method draw sendiri.

Group juga mengetahui ukurannya, len(enemies), dan kamu bisa melakukan perulangan dengannya menggunakan for enemy in enemies:. Gambar group setelah pengisian, seperti gambar lainnya.

challenge icon

Tantangan

Sedang
  1. Ganti enemy dengan Group bernama enemies yang berisi lima sprite Enemy, dipusatkan pada x = 64, 192, 320, 448, dan 576, semuanya pada y = 60.
  2. Panggil enemies.update() setiap frame.
  3. Gambar sprite tersebut dengan enemies.draw(screen), setelah pengisian layar.

Coba sendiri

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Group")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
enemy_image = pygame.image.load("assets/images/enemy_red.png").convert_alpha()


class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 6
        if keys[pygame.K_RIGHT]:
            self.rect.x += 6
        self.rect.clamp_ip(screen.get_rect())


class Enemy(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = enemy_image
        self.rect = self.image.get_rect(center=(x, y))

    def update(self):
        self.rect.y += 3
        if self.rect.top > 480:
            self.rect.bottom = 0


player = Player()
enemy = Enemy(320, 60)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player.update()
    enemy.update()

    screen.fill((20, 22, 40))
    screen.blit(enemy.image, enemy.rect)
    screen.blit(player.image, player.rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Sprite dan Gambar

Latihan sendiri: Playground Pygame