Menu
CoddyTech

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.

challenge icon

Görev

Orta
  1. timer ve sayacı kaldır.
  2. Her karede, üç resmin her biri sırayla 120 milisaniye görünecek şekilde frame_index değerini pygame.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

Kendi başına pratik yap: Pygame playground