Przeszkody
Część sekcji Zasady gry ścieżki Pygame w Coddy. Lekcja 26 z 29.
Teraz coś, nad czym trzeba przeskoczyć. Przeszkoda to duszek, który pojawia się nieco za prawą krawędzią, na ziemi, i porusza się w lewo:
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 zawiera kolczastą kulę i gluta, wczytane raz, dzięki czemu każda przeszkoda wybiera obrazek bez odczytywania pliku. kill() usuwa duszka ze wszystkich grup, do których należy, więc przeszkody, które znikną po lewej stronie, są usuwane.
Trzymaj je w grupie: obstacles.update() przesuwa je wszystkie, a obstacles.draw(screen) rysuje je wszystkie. Dodaje je timer. Za każdym razem, gdy zadziała, uruchom go ponownie z losowym odstępem czasu, żeby gracz nie mógł skakać w rytm:
if event.type == SPAWN:
obstacles.add(Obstacle())
pygame.time.set_timer(SPAWN, random.randint(1000, 2000))Biegacz nie może jeszcze w nie trafić. Tym zajmiemy się w następnej kolejności.
Wyzwanie
Średni- Dodaj
SPAWN = pygame.USEREVENT + 1,speed = 6oraz listęobstacle_imageszspike_ball.pngiblob.png. - Napisz duszka
Obstacletak, jak pokazano. - Utwórz grupę o nazwie
obstaclesi uruchom timerSPAWNna 1500 ms. - Po zdarzeniu
SPAWNdodaj przeszkodę i uruchom timer ponownie, używającrandom.randint(1000, 2000). - Aktualizuj i rysuj grupę w każdej klatce.
Spróbuj swoich sił
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()
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Zasady gry
3Timery i fale
Bezpieczny po trafieniuZdarzenie timeraSkała co 800 msFale, które rosnąOdliczanie do startu6Podniebny biegacz
BiegaczSkokPoćwicz samodzielnie: Edytor online Pygame