Tek Seferlik Bir Patlama
Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 28 / 36.
Bazı animasyonlar bir kez oynatılır ve sona erer: bir patlama explosion_1.png ile explosion_4.png arasındaki görselleri gösterir ve sonra kaybolur. Bir sprite olarak kendi sayacını çalıştırabilir ve görseller tükendiğinde kendini kaldırabilir:
def update(self):
self.timer += 1
if self.timer == 5:
self.timer = 0
self.index += 1
if self.index == len(explosion_frames):
self.kill()
else:
self.image = explosion_frames[self.index]Her patlamanın kendine ait bir timer ve index değeri vardır; böylece farklı anlarda başlatılan on patlamanın her biri baştan oynatılır. Tek yapman gereken self.image değerini değiştirmektir: grup, sprite'ın o anda tuttuğu görseli çizer.
Listeyi okumadan önce sona ulaşılıp ulaşılmadığını kontrol et: explosion_frames[4] mevcut değildir ve son görsel 5 karesi boyunca gösterildikten sonra kill() patlamayı gruptan çıkarır. Bir patlamayı başlatmak için pencerede herhangi bir yere tıkla.
Görev
OrtaExplosion sınıfına bir update yöntemi ekle: her 5 karede explosion_frames içindeki bir sonraki resme geçsin ve dördüncü resim 5 kare boyunca gösterildikten sonra self.kill() çağrısı yapsın.
Kendin dene
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Explosions")
clock = pygame.time.Clock()
explosion_frames = []
for n in range(1, 5):
explosion_frames.append(pygame.image.load(f"assets/images/explosion_{n}.png").convert_alpha())
class Explosion(pygame.sprite.Sprite):
def __init__(self, center):
super().__init__()
self.index = 0
self.timer = 0
self.image = explosion_frames[0]
self.rect = self.image.get_rect(center=center)
explosions = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
explosions.add(Explosion(event.pos))
explosions.update()
screen.fill((20, 22, 40))
explosions.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