Menu
CoddyTech

En Yüksek Düşme Hızı

Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 13 / 35.

Yerçekimi düşme hızını artırmaya devam eder. Yeterince yüksekten düşürürsen oyuncu tek karede 30 ya da 40 piksel hareket eder. Bir karo 36 piksel yüksekliğindedir, bu yüzden bu hızda oyuncu iki kare arasında bir platformun içinden geçebilir ve platformla hiç üst üste gelmeyebilir.

Gerçek düşüşlerin de bir azami hızı vardır. Hızı min ile sınırla:

MAX_FALL = 12
# döngünün içinde
vel_y = min(vel_y + GRAVITY, MAX_FALL)

min, iki sayısından küçük olanı verir; bu yüzden hız, 12'ye ulaşana kadar her karede 1 artar ve sonra bu değerde kalır. Bir zıplama -15'te, sınırın altında başlar; dolayısıyla zıplamalar değişmez.

On iki, bir karonun üçte biridir: oyuncu neyin üzerine düşerse düşsün, bir karede onunla üst üste gelir ve iniş kontrolü bunu yakalayabilir.

challenge icon

Görev

Kolay
  1. Üste MAX_FALL = 12 ekle.
  2. vel_y += GRAVITY ifadesini vel_y = min(vel_y + GRAVITY, MAX_FALL) ile değiştir.

Oyuncu havada başlar, böylece en yüksek hıza ulaştığını görebilirsin.

Kendin dene

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

Dünyalar bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground