Mendarat di platform
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 16 dari 35.
Sekarang biarkan dinding menahan pemain. Setelah gerakan ke samping diperbaiki, gerakkan pemain sepanjang sumbu y dan perbaiki gerakan itu dengan cara yang sama: jika pemain bertumpang tindih dengan dinding saat jatuh, letakkan kakinya di bagian atas dinding.
vel_y = min(vel_y + GRAVITY, MAX_FALL)
player.y += vel_y
on_ground = False
for wall in walls:
if player.colliderect(wall):
if vel_y > 0:
player.bottom = wall.top
vel_y = 0
on_ground = Trueon_ground dimulai dengan nilai False pada setiap frame, dan hanya pendaratan yang membuatnya bernilai True. Berjalanlah melewati tepi, lalu pada frame berikutnya tidak ada apa pun di bawah pemain, jadi pemain jatuh dan tidak bisa melompat di udara.
Ini menggantikan baris FLOOR: baris terbawah peta adalah tanah seperti dinding lainnya. Gravitasi menarik pemain 1 piksel ke dalam tanah pada setiap frame, lalu pengujian pendaratan mengangkatnya kembali, sehingga pemain tetap berdiri.
Tantangan
Sedang- Hapus pemeriksaan baris
FLOOR. - Setelah
player.y += vel_y, aturon_ground = False, lalu lakukan perulangan padawalls. - Untuk setiap wall yang ditabrak player saat
vel_y > 0:player.bottom = wall.top,vel_y = 0,on_ground = True.
Coba sendiri
import pygame
TILE = 36
SPEED = 4
GRAVITY = 1
JUMP = -15
MAX_FALL = 12
FLOOR = 324
LEVEL = [
"................",
"................",
"................",
"....P.....###...",
"................",
"................",
"...####.........",
"............#...",
"#.......#...#..#",
"################",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Landing")
clock = pygame.time.Clock()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()
block_img = pygame.image.load("assets/images/block.png").convert_alpha()
player_img = pygame.image.load("assets/images/player.png").convert_alpha()
walls = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
elif char == "P":
start = (col * TILE + TILE // 2, row * TILE + TILE)
player = player_img.get_rect(midbottom=start)
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
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4
keys = pygame.key.get_pressed()
dx = 0
if keys[pygame.K_LEFT]:
dx -= SPEED
if keys[pygame.K_RIGHT]:
dx += SPEED
player.x += dx
for wall in walls:
if player.colliderect(wall):
if dx > 0:
player.right = wall.left
elif dx < 0:
player.left = wall.right
vel_y = min(vel_y + GRAVITY, MAX_FALL)
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 wall in walls:
screen.blit(block_img, wall)
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 Kali4Tabrakan dengan Platform
Dinding kiri dan kananMendarat di platformMembentur kepalaJatuh keluar dari levelSatu sumbu setiap kaliLatihan sendiri: Playground Pygame