Melompat dari Tanah
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 11 dari 35.
Lompatan adalah kecepatan negatif. Atur vel_y = -15 dan pemain bergerak ke atas sejauh 15 piksel; gravitasi mengurangi nilainya sebesar 1 setiap frame sampai pemain jatuh lagi. Itulah yang membentuk lintasan lengkung.
Lompatan hanya boleh dimulai dari tanah. Simpan penanda yang menunjukkan apakah pemain berada di lantai pada frame ini:
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = TrueGunakan event KEYDOWN untuk melompat, agar satu kali menekan tombol menghasilkan satu lompatan, baik tombol ditahan maupun tidak:
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMPevent.key in (pygame.K_SPACE, pygame.K_UP) bernilai True untuk salah satu dari kedua tombol. Saat di udara, on_ground bernilai False, jadi tekanan kedua tidak melakukan apa pun.
Tantangan
Sedang- Tambahkan
JUMP = -15di bagian atas danon_ground = Falsesebelum perulangan game. - Setiap frame, tetapkan
on_ground = Falsesebelum pemeriksaan lantai danon_ground = Truedi dalamnya. - Saat terjadi
KEYDOWNpada Space atau Up, jikaon_groundbernilai True, tetapkanvel_y = JUMP.
Coba sendiri
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Gravity")
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
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
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
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
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
1Peta dari Teks
Level dalam TeksBaris dan KolomHuruf yang Memiliki MaknaTempat Pemain MemulaiSatu Layar Setiap Kali3Gravitasi dan Melompat
Jatuh karena GravitasiMelompat dari TanahLompatan PendekKecepatan Jatuh MaksimumPenyangga LompatanLatihan sendiri: Playground Pygame