Koşma Animasyonu
Coddy'nin Pygame Journey'sinin Oyun Kuralları bölümünün bir parçası. Ders 25 / 29.
Koşucu süzülür. Dosya paketinde aynı kahramanın bacakları açık ikinci bir resmi olan player_walk.png bulunur. İki resim arasında geçiş yapmak, koşuyormuş gibi görünmesini sağlar.
İkisini de bir listede tut ve kareleri say. self.step // 8 her 8 karede 1 artar ve % 2 bunu 0, 1, 0, 1 dizisine dönüştürür:
if self.rect.bottom == GROUND_Y:
self.step += 1
self.image = self.frames[self.step // 8 % 2]
else:
self.image = self.frames[1]Saniyede 60 kare hızında, her resim için 8 kare saniyede yaklaşık yedi adım demektir. Daha az kare koşuyu hızlandırır, daha fazlası yavaşlatır.
Havada koşulacak bir zemin olmadığından, koşucu yere inene kadar tek bir resmi gösterir. Her iki resmi de __init__ içinde bir kez yükle ve self.image'in gösterdiği resmi değiştir: grup veya blit, self.image'in gösterdiği resmi çizer.
Görev
Ortaplayer.pngveplayer_walk.pngdosyalarınıself.frameslistesine yükle; başlangıçtaself.imageilk öğe olsun veself.step = 0olarak ayarlansın.update()içinde, yerdeyken bir adım say veself.frames[self.step // 8 % 2]öğesini göster.- Havadayken
self.frames[1]öğesini göster.
Kendin dene
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("Sky Runner")
clock = pygame.time.Clock()
SKY = (140, 200, 240)
GROUND = (90, 160, 80)
GROUND_Y = 260
GRAVITY = 1
class Runner(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("assets/images/player.png").convert_alpha()
self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))
self.vy = 0
def jump(self):
if self.rect.bottom == GROUND_Y:
self.vy = -16
def update(self):
self.vy += GRAVITY
self.rect.y += self.vy
if self.rect.bottom >= GROUND_Y:
self.rect.bottom = GROUND_Y
self.vy = 0
runner = Runner()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
runner.jump()
runner.update()
screen.fill(SKY)
pygame.draw.rect(screen, GROUND, (0, GROUND_Y, 640, 60))
screen.blit(runner.image, runner.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Oyun Kuralları bölümündeki tüm dersler
Kendi başına pratik yap: Pygame playground