Menu
CoddyTech

Zıplama

Coddy'nin Pygame Journey'sinin Oyun Kuralları bölümünün bir parçası. Ders 24 / 29.

Bir sıçrama, yerçekiminin azalttığı yukarı yönlü bir hızdır. Koşucuya dikey bir hız verin: vy. Her karede yerçekimi bu hıza 1 ekler ve koşucu bu hız kadar hareket eder:

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 aşağı doğru büyür, bu nedenle sıçrama vy = -16 değerini ayarlar: koşucu 15 piksel, ardından 14, sonra 13 piksel yükselir; yaklaşık 120 piksel yükseldikten sonra yavaşlayıp durur ve giderek hızlanarak geri düşer. Zemin çizgisine ulaştığında bu çizgiye yerleştirilir ve durur.

Yalnızca yerdeyken sıçrayın. Bu kontrol olmadan havadayken yapılan her basış yeni bir sıçrama başlatır ve koşucu sonsuza kadar yükselebilir:

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

5. Bölüm, üzerine inilebilecek platformlar ekleyerek bunu geliştirir.

challenge icon

Görev

Orta
  1. Koşucuya GRAVITY = 1 ve self.vy = 0 ekle.
  2. Gösterildiği gibi update() yaz ve her karede, çizimden önce runner.update() çağır.
  3. jump() yaz: yalnızca koşucu yerdeyken vy = -16.
  4. Boşluk veya Yukarı tuşu runner.jump() çağırır.

Kendin dene

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

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

Oyun Kuralları bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground