Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save MrArnaudMichel/c8d84ae8597f375be842edd05cf99bee to your computer and use it in GitHub Desktop.
Save MrArnaudMichel/c8d84ae8597f375be842edd05cf99bee to your computer and use it in GitHub Desktop.
Ajouter une animation aux orateurs avec pygame

Ajouter une animation aux orateurs avec pygame

Pour ajouter une animation aux orateurs, il faudra modifier le code source de dialogue.py.

Modifier les paramètres de DialogueScreen

  1. Pour ajouter une animation aux orateurs, il faudra modifier le __init__ de DialogueScreen pour ajouter un paramètre speakers: list[str] = [] qui contiendra les noms des orateurs qui ont déjà parlé.

Voilà à quoi ressemblera le __init__ de DialogueScreen après modification :

def __init__(self, screen: Screen, dialogue_data: DialogueData, speed: int = 0.5, speakers: list[str] = []):
  1. Ensuite, il faudra ajouter un attribut speakers à DialogueScreen pour stocker les noms des orateurs qui ont déjà parlé.

Voilà la ligne à ajouter à DialogueScreen :

self.speakers: list[str] = speakers
  1. Enfin, il faudra ajouter le paramètre speakers à l'appel de DialogueScreen dans __init__ de Dialogue.

Voilà à quoi ressemblera l'appel de DialogueScreen dans __init__ de Dialogue après modification :

self.dialogue_screen = DialogueScreen(self.screen, dialogue_data=self.dialogue_data, speakers=self.speakers)

Ajouter des ressources pour les animations

  1. Ajouter les images des orateurs dans le dossier assets/interfaces/characters/battlers.

Les assets que j'ai utilisés ne sont pas libres de droits, je ne peux donc pas les partager. Mais vous pouvez ajouter vos propres images.

Important

Il faudra que le nom de l'image de l'orateur corresponde à celui présent dans le dialogue. Exemple : si le dialogue est: :[name=Pierre le champion;face=1010,300_big]:Bienvenue jeune dresseur., l'image devra être 300_big.png.

  1. Après avoir chargé le nom de l'orateur (self.speaker_name = self.font.render(self.dialogue_data.speaker_name, True, (255, 255, 255))), il faudra charger l'image de l'orateur et du joueur.

Pour cela, il faudra ajouter ces lignes de code après le chargement du nom de l'orateur :

self.speaker_image = pygame.image.load(
    f"../../assets/interfaces/characters/battlers/{self.dialogue_data.speaker_image[1]}.png").convert_alpha()
self.player_image = pygame.image.load(
    f"../../assets/interfaces/characters/battlers/heros_swan_big.png").convert_alpha()
  1. Enfin, il faudra afficher les images des orateurs et lancer l'animation si l'orateur n'a pas encore parlé.

Il faudra ajouter l'attribut self.speaker_offset = 0 à DialogueScreen pour stocker la position de l'animation de l'orateur.

Voilà la ligne à ajouter à DialogueScreen :

self.speaker_offset: int = 0

Ensuite, il faudra ajouter ces lignes de code après la vérification que le dialogue est terminé :

if self.dialogue_data.speaker_name != "error":
    if self.dialogue_data.speaker_name == "heros":
        self.screen.display.blit(self.player_image, (-128, 78))
        self.screen.display.blit(self.background_name, (-8, 480))
        self.screen.display.blit(self.speaker_name, (
            -8 + self.background_name.get_width() // 2 - self.speaker_name.get_width() // 2, 488))
    else:
        if self.dialogue_data.speaker_name not in self.speakers:
            if self.speaker_offset > 128:
                self.speakers.append(self.dialogue_data.speaker_name)
            else:
                self.speaker_offset += 1

        self.screen.display.blit(self.speaker_image, (1280 - self.speaker_image.get_width() + 128 - self.speaker_offset,
                                                      78))
        self.screen.display.blit(self.background_name,
                                 (1280 - 124 - self.background_name.get_width() // 2, 480))
        self.screen.display.blit(self.speaker_name, (
            1280 - 124 - self.background_name.get_width() // 2 + self.background_name.get_width() // 2 - self.speaker_name.get_width() // 2,
            488))

Pour décrire ce code:

  • On vérifie si le nom de l'orateur est "heros" pour afficher l'image du joueur.
  • On vérifie si l'orateur n'a pas encore parlé pour afficher son image et lancer l'animation.
  • On vérifie si l'animation de l'orateur est terminée pour ajouter son nom à la liste des orateurs qui ont déjà parlé.

Si vous avez des questions, n'hésitez pas à les poser dans les commentaires ou sur Discord.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment