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.
Tantangan
Sedang- Ganti
enemydengan Group bernamaenemiesyang berisi lima sprite Enemy, dipusatkan pada x = 64, 192, 320, 448, dan 576, semuanya pada y = 60. - Panggil
enemies.update()setiap frame. - 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()
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