Menu
CoddyTech

Kısa Sıçrayışlar

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

Çoğu platform oyununda tuşa kısa süre basmak küçük bir sıçrama, uzun süre basmak ise tam bir zıplama sağlar. Böylece oyuncu her zıplamanın yüksekliğini seçebilir.

Zıplama tuşu bırakıldığında bir KEYUP olayı gerçekleşir. Oyuncu hâlâ hızla yükseliyorsa yükselişini yavaşlat:

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

Tuş basılı tutulursa yükseliş sırasında hiçbir zaman KEYUP gönderilmez; bu yüzden zıplama tam yüksekliğine ulaşır. Tuşa kısa süre basmak bu olayı bir kare sonra gönderir, hız -4'e düşer ve yer çekimi birkaç kare sonra oyuncunun yönünü değiştirir.

vel_y < -4 testi önemlidir. Tepeye yakınken veya düşerken vel_y -4'ün üzerindedir ve bu durumda onu -4'e ayarlamak oyuncuyu yeniden yukarı iter.

challenge icon

Görev

Kolay
  1. Boşluk veya Yukarı tuşu bırakıldığında (KEYUP), vel_y -4'ten küçükse vel_y = -4 olarak ayarlayın.
  2. KEYDOWN sıçramasını olduğu gibi bırakın.

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("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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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

Kendi başına pratik yap: Pygame playground