אנימציית ריצה
חלק מהיחידה חוקי המשחק במסלול ה-Pygame של Coddy. שיעור 25 מתוך 29.
הרץ מחליק. בחבילה יש תמונה שנייה של אותו גיבור, player_walk.png, שבה רגליו פשוקות. החלפה בין שתי התמונות גורמת לו לרוץ.
שמור את שתיהן ברשימה וספור פריימים. self.step // 8 גדל ב־1 כל 8 פריימים, ו־% 2 הופך את זה ל־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 פריימים לכל תמונה הם בערך שבעה צעדים בשנייה בקצב של 60 פריימים בשנייה. פחות פריימים גורמים לו לרוץ מהר יותר, ויותר פריימים מאטים אותו.
באוויר אין על מה לרוץ, לכן הרץ מחזיק בתמונה אחת עד שהוא נוחת. טען את שתי התמונות פעם אחת, בתוך __init__, והחלף איזו מהן self.image מציין: הקבוצה או פעולת ה־blit מציירות את מה שהוא מציין.
אתגר
בינוני- טען את
player.pngואתplayer_walk.pngלתוך רשימה,self.frames, כאשרself.imageמתחיל בתמונה הראשונה ו־self.step = 0. - ב־
update(), כשנמצאים על הקרקע, ספור צעד והצג אתself.frames[self.step // 8 % 2]. - באוויר, הצג את
self.frames[1].
נסו בעצמכם
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()
כל השיעורים ביחידה חוקי המשחק
תרגלו בעצמכם: Pygame אונליין