Menu
CoddyTech

Kecepatan Jatuh Maksimum

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

Gravitasi terus menambah kecepatan jatuh. Jika jatuh dari tempat yang cukup tinggi, pemain bergerak 30 atau 40 piksel dalam satu frame. Tinggi sebuah ubin adalah 36 piksel, jadi pada kecepatan itu pemain bisa menembus platform di antara dua frame tanpa pernah bertumpang tindih dengannya.

Jatuh sungguhan juga memiliki kecepatan maksimum. Batasi kecepatan dengan min:

MAX_FALL = 12
# di dalam perulangan
vel_y = min(vel_y + GRAVITY, MAX_FALL)

min memberikan nilai yang lebih kecil dari kedua angka tersebut, sehingga kecepatan bertambah 1 setiap frame sampai mencapai 12, lalu tetap pada angka itu. Lompatan dimulai pada -15, di bawah batas maksimum, jadi lompatan tidak berubah.

Dua belas adalah sepertiga tinggi ubin: apa pun yang menjadi tempat pemain mendarat, pada salah satu frame pemain akan bertumpang tindih dengannya, dan pemeriksaan pendaratan dapat mendeteksinya.

challenge icon

Tantangan

Mudah
  1. Tambahkan MAX_FALL = 12 di bagian atas.
  2. Ganti vel_y += GRAVITY dengan vel_y = min(vel_y + GRAVITY, MAX_FALL).

Pemain mulai di udara, jadi kamu bisa melihatnya mencapai kecepatan maksimum.

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("Falling Speed")
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
        elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
            if vel_y < -4:
                vel_y = -4

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

Semua pelajaran di Dunia Game

Latihan sendiri: Playground Pygame