קפיצה
חלק מהיחידה חוקי המשחק במסלול ה-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 בונים על כך ומוסיפים פלטפורמות לנחיתה.
אתגר
בינוני- הוסיפו לרץ את
GRAVITY = 1ואתself.vy = 0. - כתבו את
update()כפי שמוצג וקראו ל־runner.update()בכל פריים, לפני הציור. - כתבו את
jump():vy = -16, רק כאשר הרץ נמצא על הקרקע. - מקש הרווח או החץ למעלה קוראים ל־
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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה חוקי המשחק
תרגלו בעצמכם: Pygame אונליין