Obstacles
Fait partie de la section Règles du jeu du Journey Pygame de Coddy. Leçon 26 sur 29.
Maintenant, ajoutons quelque chose à sauter. Un obstacle est un sprite qui apparaît un peu après le bord droit, au sol, et se déplace vers la gauche :
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 contient la boule à pointes et la masse gélatineuse, chargées une seule fois, afin que chaque obstacle choisisse une image sans lire de fichier. kill() retire un sprite de tous les groupes auxquels il appartient, ainsi les obstacles qui sortent par la gauche sont oubliés.
Garde-les dans un groupe : obstacles.update() les déplace tous et obstacles.draw(screen) les dessine tous. Un minuteur les ajoute. Chaque fois qu’il se déclenche, relance-le avec un intervalle aléatoire, afin que le joueur ne puisse pas sauter à un rythme régulier :
if event.type == SPAWN:
obstacles.add(Obstacle())
pygame.time.set_timer(SPAWN, random.randint(1000, 2000))Le coureur ne peut pas encore les toucher. Nous verrons cela ensuite.
Défi
Moyen- Ajoute
SPAWN = pygame.USEREVENT + 1,speed = 6et une listeobstacle_imagesavecspike_ball.pngetblob.png. - Écris le sprite
Obstaclecomme indiqué. - Crée un groupe nommé
obstacleset démarre le minuteurSPAWNà 1500 ms. - À
SPAWN, ajoute un obstacle et redémarre le minuteur avecrandom.randint(1000, 2000). - Mets à jour et dessine le groupe à chaque image.
Essayez vous-même
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()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Règles du jeu
Entraînez-vous par vous-même : Playground Pygame