Jatuh karena Gravitasi
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 10 dari 35.
Hero di jendela turun 4 piksel setiap frame dengan kecepatan tetap, seperti lift. Benda nyata bertambah cepat saat jatuh. Simpan kecepatan vertikal pemain dalam variabel, lalu tingkatkan nilainya setiap frame:
vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0vel_y adalah kecepatan dalam piksel setiap frame; nilai positif berarti ke bawah. GRAVITY = 1 menambahkan satu ke nilainya setiap frame, jadi pemain jatuh sejauh 1, lalu 2, lalu 3 piksel, dan seterusnya.
Lantai di sini adalah garis pada FLOOR = 324, bagian atas rumput. Saat pemain melewatinya, letakkan bagian bawahnya pada garis dan hentikan jatuhnya. Bab berikutnya akan mengganti garis ini dengan platform sungguhan.
Pemain adalah Rect gambar: player_img.get_rect(topleft=(264, 40)) adalah Rect berukuran 48 kali 48 pada posisi itu, dan screen.blit(player_img, player) menggambar gambar tersebut di sana.
Tantangan
Mudah- Tambahkan
GRAVITY = 1di bagian atas danvel_y = 0sebelum perulangan game. - Setiap frame, tambahkan
GRAVITYkevel_y, lalu tambahkanvel_ykeplayer.y, sebagai penggantiplayer.y += 4. - Saat
player.bottommelewatiFLOOR, aturplayer.bottom = FLOORdanvel_y = 0.
Coba sendiri
import pygame
TILE = 36
FLOOR = 324
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))
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
player.y += 4
if player.bottom > FLOOR:
player.bottom = FLOOR
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