Menu
CoddyTech

Lompatan Pendek

Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 12 dari 35.

Di sebagian besar game platformer, ketukan singkat membuat karakter melompat sedikit, sedangkan menekan tombol lebih lama membuatnya melompat penuh. Dengan begitu, pemain dapat memilih ketinggian setiap lompatan.

Saat tombol lompat dilepas, event KEYUP terjadi. Jika karakter masih naik dengan cepat, perlambat gerak naiknya:

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

Tombol yang terus ditekan tidak mengirimkan KEYUP selama karakter naik, jadi lompatan mencapai ketinggian penuh. Ketukan singkat mengirimkannya satu frame kemudian, kecepatannya turun menjadi -4, dan gravitasi membuat karakter berbalik arah beberapa frame setelahnya.

Pemeriksaan vel_y < -4 itu penting. Di dekat titik tertinggi, atau saat karakter jatuh, vel_y lebih besar dari -4, dan mengaturnya ke -4 pada saat itu akan mendorong karakter naik kembali.

challenge icon

Tantangan

Mudah
  1. Saat tombol Spasi atau Atas dilepas (KEYUP), jika vel_y kurang dari -4, atur vel_y = -4.
  2. Biarkan lompatan KEYDOWN seperti semula.

Coba sendiri

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

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

Semua pelajaran di Dunia Game

Latihan sendiri: Playground Pygame