Menu
CoddyTech

Melompat

Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 24 dari 29.

Lompatan adalah kecepatan ke atas yang dikurangi oleh gravitasi. Beri pelari kecepatan vertikal, vy. Setiap frame, gravitasi menambahkan 1 padanya dan pelari bergerak sejauh nilai itu:

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 bertambah ke bawah, jadi lompatan menetapkan vy = -16: pelari naik 15 piksel, lalu 14, lalu 13, melambat hingga berhenti sekitar 120 piksel di atas, kemudian jatuh kembali semakin cepat. Saat mencapai garis tanah, posisinya diatur tepat di garis itu dan ia berhenti.

Lompat hanya dari tanah. Tanpa pemeriksaan itu, setiap tekanan tombol di udara akan memulai lompatan baru, dan pelari bisa terus naik tanpa batas:

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

Bagian 5 mengembangkan ini dengan platform untuk tempat mendarat.

challenge icon

Tantangan

Sedang
  1. Tambahkan GRAVITY = 1 dan self.vy = 0 ke runner.
  2. Tulis update() seperti yang ditunjukkan, lalu panggil runner.update() di setiap frame, sebelum menggambar.
  3. Tulis jump(): vy = -16, hanya saat runner berada di tanah.
  4. Tombol Space atau Up memanggil runner.jump().

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


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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Aturan Game

Latihan sendiri: Playground Pygame