Menu
CoddyTech

קפיצות קצרות

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

ברוב משחקי הפלטפורמה, הקשה קצרה גורמת לקפיצה קטנה, ולחיצה ממושכת גורמת לקפיצה מלאה. כך השחקן יכול לבחור את גובהה של כל קפיצה.

כשמשחררים את מקש הקפיצה, מתקבל אירוע KEYUP. אם השחקן עדיין עולה במהירות, האטו את העלייה:

elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
    if vel_y < -4:
        vel_y = -4

מקש שמוחזק לחוץ לא שולח KEYUP במהלך העלייה, ולכן הקפיצה מגיעה לגובה המלא שלה. הקשה קצרה שולחת את האירוע כעבור פריים אחד, המהירות יורדת ל־-4, וכעבור כמה פריימים כוח הכבידה גורם לשחקן להסתובב ולרדת.

התנאי vel_y < -4 חשוב. סמוך לשיא הקפיצה או בזמן נפילה, vel_y גדול מ־-4, והגדרתו ל־-4 בשלב הזה תדחוף את השחקן בחזרה למעלה.

challenge icon

אתגר

קל
  1. בעת שחרור מקש הרווח או החץ למעלה, כאשר vel_y קטן מ־-4, יש להגדיר vel_y = -4.
  2. יש להשאיר את הקפיצה בעת KEYDOWN כפי שהיא.

נסו בעצמכם

import pygame

TILE = 36
FLOOR = 324
GRAVITY = 1
JUMP = -15

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Short Hops")
clock = pygame.time.Clock()

background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()
grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
player_img = pygame.image.load("assets/images/player.png").convert_alpha()

player = player_img.get_rect(topleft=(264, 40))
vel_y = 0
on_ground = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
            if on_ground:
                vel_y = JUMP

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4

    vel_y += GRAVITY
    player.y += vel_y
    on_ground = False
    if player.bottom > FLOOR:
        player.bottom = FLOOR
        vel_y = 0
        on_ground = True

    for y in range(0, 360, 72):
        for x in range(0, 576, 72):
            screen.blit(background, (x, y))
    for x in range(0, 576, TILE):
        screen.blit(grass_img, (x, FLOOR))
    screen.blit(player_img, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

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

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

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