Zamanla Animasyon
Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 27 / 36.
Kare sayacı animasyonu kare hızına bağlar. Saniyede yalnızca 30 kare işleyebilen bir bilgisayarda böceğin kanatları yarı hızda çırpar. Bunun yerine zamana bağla.
pygame.time.get_ticks(), pygame.init() çağrısından bu yana geçen milisaniye sayısıdır. Bunu her görüntünün ne kadar süre gösterilmesi gerektiğine bölersen kaç görüntünün geçtiğini bulursun; % bunu bir indekse dönüştürür:
frame_index = pygame.time.get_ticks() // 120 % len(frames)0 ile 119 ms arasında görüntü 0, 120 ile 239 ms arasında görüntü 1, ardından 2 ve sonra yeniden 0 gösterilir. Tutulup sıfırlanması gereken bir sayaç yok: her karede yeniden hesaplanan tek satır. Oyun yavaşlarsa animasyon da yavaşlamak yerine bir görüntüyü atlar.
// böler ve kalanı atar: 250 // 120 sonucu 2'dir. Bu görsel çizelgesinin üçüncü satırında uçan bir böcek üç pozda yer alır; 6'dan 8'e kadar olan sütunlar zaten frames içine kesilmiştir.
Görev
Ortatimerve sayacı kaldır.- Her karede, üç resmin her biri sırayla 120 milisaniye görünecek şekilde
frame_indexdeğerinipygame.time.get_ticks()kullanarak ayarla.
Kendin dene
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Flying Bug")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (6, 7, 8):
frame = sheet.subsurface((col * 24, 48, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
frame_index = 0
timer = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)
screen.fill((20, 22, 40))
image = frames[frame_index]
screen.blit(image, image.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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