Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pygame débutant, POO] Comment changer une image ?

Changer l'image affichée pour un sprite lorsqu'une touche est pressée.

7 août 2023 à 16:17:54

Bonjour à tous,

dans mon programme je souhaite pouvoir changer l'image affichée d'un sprite (et plus généralement pouvoir appliquer cette fonctionnalité à la classe) lorsque une touche directionnelle est pressée.

En gros, lorsque j'appuie sur "q", il faudrait que mon personnage regarde vers la gauche au lieu de se déplacer en arrière.

J'ai déjà les 2 images (knight_right, knight_left), mais après avoir essayé plusieurs méthodes (notamment avec des conditions if et elif et avec une variable déterminant l'image à afficher), je ne comprends pas le chemin à suivre.

import pygame
import os

pygame.init()

os.environ["SDL_VIDEO_CENTERED"] = "1"
info = pygame.display.Info()
SCREEN_WIDTH = info.current_w
SCREEN_HEIGHT = info.current_h
screen = pygame.display.set_mode((SCREEN_WIDTH - 30, SCREEN_HEIGHT - 30), pygame.RESIZABLE)
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)

knight_right, knight_left = "HeroV1right.png", "HeroV1left.png"

pygame.display.set_caption("Ya lioubliou vodkou")
clock = pygame.time.Clock()
dt = 0.7

class Hero(pygame.sprite.Sprite):
     def __init__(self, image, player_pos):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image).convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.center = player_pos


     def handle_keys(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_z]:
            self.rect.y -= 5 * dt
        if keys[pygame.K_s]:
            self.rect.y += 5 * dt
        if keys[pygame.K_q]:
            self.rect.x -= 5 * dt
        if keys[pygame.K_d]:
            self.rect.x += 5 * dt

#group for hero
heros = pygame.sprite.Group()

#creation of hero
knight = Hero(knight_right, player_pos)
heros.add(knight)

print(knight.handle_keys())

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill("black")

    knight.handle_keys()

    heros.update()

    heros.draw(screen)


    clock.tick(60)

    pygame.display.flip()

pygame.quit()

Mon idée principale était d'ajouter plusieurs self.image et d'en prioriser un en fonction de la touche pressée avec la fonction handle_keys.

Merci beaucoup pour votre aide^^

  • Partager sur Facebook
  • Partager sur Twitter
7 août 2023 à 16:33:51

Pour déplacer une image, vous avez un tutoriel là dessus avec la documentation de pygame. Il donne les étapes à respecter.
  • Partager sur Facebook
  • Partager sur Twitter