Gruplar
Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 17 / 36.
Ruhsatlar kalabalık hâlinde gelir: düşmanlar, lazerler, madeni paralar. Bir Group birçok ruhsatı barındırır ve hepsine aynı işlemi uygular:
enemies = pygame.sprite.Group()
for i in range(5):
enemies.add(Enemy(64 + i * 128, 60))Döngüdeki iki çağrı, bir liste üzerinde yazdığınız döngülerin yerini alır:
enemies.update()
enemies.draw(screen)enemies.update(), gruptaki her ruhsat için update() işlevini çağırır. enemies.draw(screen), her ruhsatın self.image özelliğini self.rect konumuna çizer: bu nedenle bu iki adın tam olarak böyle olması gerekir. Bir gruptaki ruhsatın kendi draw yöntemine ihtiyacı yoktur.
Bir grup boyutunu da bilir: len(enemies). Ayrıca for enemy in enemies: ile üzerinde döngü kurabilirsiniz. Herhangi bir resim gibi grubu da dolgudan sonra çizin.
Görev
Ortaenemyyerine, x = 64, 192, 320, 448 ve 576 noktalarında, hepsi y = 60 konumunda merkezlenmiş beş Enemy sprite içerenenemiesadlı bir Group kullanın.- Her karede
enemies.update()çağrısını yapın. - Doldurma işleminden sonra bunları
enemies.draw(screen)ile çizin.
Kendin dene
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()
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