Lompatan Pendek
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 12 dari 35.
Di sebagian besar game platformer, ketukan singkat membuat karakter melompat sedikit, sedangkan menekan tombol lebih lama membuatnya melompat penuh. Dengan begitu, pemain dapat memilih ketinggian setiap lompatan.
Saat tombol lompat dilepas, event KEYUP terjadi. Jika karakter masih naik dengan cepat, perlambat gerak naiknya:
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4Tombol yang terus ditekan tidak mengirimkan KEYUP selama karakter naik, jadi lompatan mencapai ketinggian penuh. Ketukan singkat mengirimkannya satu frame kemudian, kecepatannya turun menjadi -4, dan gravitasi membuat karakter berbalik arah beberapa frame setelahnya.
Pemeriksaan vel_y < -4 itu penting. Di dekat titik tertinggi, atau saat karakter jatuh, vel_y lebih besar dari -4, dan mengaturnya ke -4 pada saat itu akan mendorong karakter naik kembali.
Tantangan
Mudah- Saat tombol Spasi atau Atas dilepas (
KEYUP), jikavel_ykurang dari -4, aturvel_y = -4. - Biarkan lompatan
KEYDOWNseperti semula.
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("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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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