Menu
CoddyTech

קפיצה

חלק מהיחידה חוקי המשחק במסלול ה-Pygame של Coddy. שיעור 24 מתוך 29.

קפיצה היא מהירות כלפי מעלה שכוח הכבידה מאט. תנו לרץ מהירות אנכית, vy. בכל פריים כוח הכבידה מוסיף לה 1 והרץ זז לפיה:

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

ערך y גדל כלפי מטה, לכן קפיצה מתחילה בהגדרת vy = -16: הרץ עולה 15 פיקסלים, ואז 14, ואז 13, מאט עד לעצירה בגובה של כ־120 פיקסלים, ואז נופל מהר יותר ויותר. כשהוא מגיע לקו הקרקע, מציבים אותו עליו והוא נעצר.

קופצים רק מהקרקע. בלי הבדיקה הזאת, כל לחיצה באוויר תתחיל קפיצה חדשה, והרץ יוכל לטפס לנצח:

def jump(self):
    if self.rect.bottom == GROUND_Y:
        self.vy = -16

ביחידה 5 בונים על כך ומוסיפים פלטפורמות לנחיתה.

challenge icon

אתגר

בינוני
  1. הוסיפו לרץ את GRAVITY = 1 ואת self.vy = 0.
  2. כתבו את update() כפי שמוצג וקראו ל־runner.update() בכל פריים, לפני הציור.
  3. כתבו את jump(): vy = -16, רק כאשר הרץ נמצא על הקרקע.
  4. מקש הרווח או החץ למעלה קוראים ל־runner.jump().

נסו בעצמכם

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


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))


runner = Runner()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    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()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה חוקי המשחק

תרגלו בעצמכם: Pygame אונליין