Rintangan
Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 26 dari 29.
Sekarang tambahkan sesuatu untuk dilompati. Rintangan adalah sprite yang mulai sedikit melewati tepi kanan, di tanah, lalu bergerak ke kiri:
class Obstacle(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = random.choice(obstacle_images)
self.rect = self.image.get_rect(midbottom=(664, GROUND_Y))
def update(self):
self.rect.x -= speed
if self.rect.right < 0:
self.kill()obstacle_images berisi bola berduri dan blob, yang dimuat sekali, sehingga setiap rintangan memilih gambar tanpa membaca file. kill() mengeluarkan sprite dari setiap grup tempatnya berada, sehingga rintangan yang keluar di sebelah kiri akan dihapus.
Simpan semuanya dalam sebuah grup: obstacles.update() menggerakkan semuanya dan obstacles.draw(screen) menggambar semuanya. Timer akan menambahkan rintangan. Setiap kali timer aktif, mulai lagi dengan jeda acak agar pemain tidak bisa melompat mengikuti irama:
if event.type == SPAWN:
obstacles.add(Obstacle())
pygame.time.set_timer(SPAWN, random.randint(1000, 2000))Runner belum bisa menabrak rintangan. Itu akan dibahas selanjutnya.
Tantangan
Sedang- Tambahkan
SPAWN = pygame.USEREVENT + 1,speed = 6, dan sebuah listobstacle_imagesyang berisispike_ball.pngdanblob.png. - Tulis sprite
Obstacleseperti yang ditunjukkan. - Buat group bernama
obstaclesdan mulai timerSPAWNpada 1500 ms. - Saat
SPAWNterjadi, tambahkan obstacle dan mulai ulang timer denganrandom.randint(1000, 2000). - Perbarui dan gambar group pada setiap frame.
Coba sendiri
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
GRAVITY = 1
class Runner(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.frames = [
pygame.image.load("assets/images/player.png").convert_alpha(),
pygame.image.load("assets/images/player_walk.png").convert_alpha(),
]
self.image = self.frames[0]
self.step = 0
self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))
self.vy = 0
def jump(self):
if self.rect.bottom == GROUND_Y:
self.vy = -16
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
if self.rect.bottom == GROUND_Y:
self.step += 1
self.image = self.frames[self.step // 8 % 2]
else:
self.image = self.frames[1]
runner = Runner()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
runner.jump()
runner.update()
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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Aturan Game
Latihan sendiri: Playground Pygame