Animasi Lari
Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 25 dari 29.
Pelari itu meluncur. Paket ini memiliki gambar kedua dari pahlawan yang sama, player_walk.png, dengan kedua kakinya terbuka. Bergantian menggunakan kedua gambar itu membuatnya berlari.
Simpan keduanya dalam sebuah list dan hitung frame. self.step // 8 bertambah 1 setiap 8 frame, dan % 2 mengubahnya menjadi 0, 1, 0, 1:
if self.rect.bottom == GROUND_Y:
self.step += 1
self.image = self.frames[self.step // 8 % 2]
else:
self.image = self.frames[1]8 frame untuk setiap gambar menghasilkan sekitar tujuh langkah per detik pada 60 frame per detik. Lebih sedikit frame membuatnya berlari lebih cepat, lebih banyak frame membuatnya lebih lambat.
Di udara tidak ada tempat untuk berlari, jadi pelari itu mempertahankan satu gambar sampai mendarat. Muat kedua gambar sekali saja, di __init__, lalu ganti gambar yang ditunjuk oleh self.image: grup atau blit akan menggambar gambar yang ditunjuknya.
Tantangan
Sedang- Muat
player.pngdanplayer_walk.pngke dalam list,self.frames, denganself.imagedimulai dari gambar pertama danself.step = 0. - Di
update(), saat berada di tanah, hitung satu langkah dan tampilkanself.frames[self.step // 8 % 2]. - Saat berada di udara, tampilkan
self.frames[1].
Coba sendiri
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()
Semua pelajaran di Aturan Game
Latihan sendiri: Playground Pygame