Maison  >  Article  >  développement back-end  >  Comment choisir entre une animation dépendante du temps et une animation dépendante de l'image lors de la création de sprites animés dans Pygame ?

Comment choisir entre une animation dépendante du temps et une animation dépendante de l'image lors de la création de sprites animés dans Pygame ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 05:04:02724parcourir

How do you choose between time-dependent and frame-dependent animation when creating animated sprites in Pygame?

Création de sprites animés à partir de quelques images

Introduction

La création de sprites animés est souvent une étape cruciale dans le développement d'un jeu. Cet article explore deux techniques pour générer des sprites animés à l'aide de Pygame et d'un petit nombre de fichiers image. Dans le contexte d'un jeu, ces images pourraient représenter une explosion ou un autre élément dynamique.

Animation dépendante du temps

Dans l'animation dépendante du temps, le temps écoulé entre chaque image détermine quand l'image du sprite change. Les étapes suivantes décrivent la mise en œuvre :

  1. Chargez toutes les images de sprite dans une liste.
  2. Créez les variables index, current_time et animation_time. index suit l'image du sprite actuelle, current_time enregistre le temps écoulé depuis le dernier changement d'image et animation_time spécifie l'intervalle de temps entre les changements d'image.
  3. Dans la boucle du jeu :

    a. Incrémentez current_time du temps écoulé.

    b. Vérifiez si current_time est supérieur ou égal à animation_time. Si tel est le cas, réinitialisez current_time et incrémentez l'index.

    c. Sélectionnez l'image de sprite appropriée en fonction de l'index et mettez à jour l'image du sprite.

Animation dépendante de l'image

Dans l'animation dépendante de l'image, le nombre Le nombre d'images entre chaque changement d'image détermine le moment où l'image du sprite change. Le processus de mise en œuvre est similaire à l'animation dépendant du temps, mais avec une logique légèrement différente :

  1. Créer les variables index, current_frame et animation_frames. index suit l'image du sprite actuelle, current_frame enregistre le nombre d'images depuis le dernier changement d'image et animation_frames spécifie le nombre d'images entre les changements d'image.
  2. Dans la boucle du jeu :

    un. Incrémentez current_frame.

    b. Vérifiez si current_frame est supérieur ou égal à animation_frames. Si tel est le cas, réinitialisez current_frame et incrémentez l'index.

    c. Sélectionnez l'image de sprite appropriée en fonction de l'index et mettez à jour l'image du sprite.

Choisir entre les options

L'animation dépendante du temps maintient une vitesse d'animation constante quelle que soit la fréquence d’images. Cependant, si la fréquence d'images et l'intervalle d'animation ne s'alignent pas parfaitement, des irrégularités visuelles peuvent survenir. D'un autre côté, l'animation dépendante de l'image peut paraître plus fluide lorsque la fréquence d'images est cohérente, mais peut devenir disjointe en cas de décalage. Le choix entre les deux dépend des exigences du projet et des performances souhaitées.

Exemple de mise en œuvre

L'exemple de code suivant illustre à la fois des animations dépendant du temps et des images à l'aide de Pygame :

import pygame
import os

# Load sprite images
images = []
for file_name in os.listdir('images'):
    image = pygame.image.load(os.path.join('images', file_name)).convert()
    images.append(image)

# Create a sprite class with time-dependent and frame-dependent update methods
class AnimatedSprite(pygame.sprite.Sprite):
    def __init__(self, position, images):
        super().__init__()
        self.rect = pygame.Rect(position, images[0].get_size())
        self.images = images
        self.index = 0
        self.image = images[0]
        self.velocity = pygame.math.Vector2(0, 0)
        self.animation_time = 0.1
        self.current_time = 0
        self.animation_frames = 6
        self.current_frame = 0

    def update_time_dependent(self, dt):
        self.current_time += dt
        if self.current_time >= self.animation_time:
            self.current_time = 0
            self.index = (self.index + 1) % len(self.images)
            self.image = self.images[self.index]

    def update_frame_dependent(self):
        self.current_frame += 1
        if self.current_frame >= self.animation_frames:
            self.current_frame = 0
            self.index = (self.index + 1) % len(self.images)
            self.image = self.images[self.index]

# Create a sprite and update it in the game loop
player = AnimatedSprite((100, 100), images)
all_sprites = pygame.sprite.Group(player)

running = True
while running:
    dt = pygame.time.Clock().tick(FPS) / 1000
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    all_sprites.update(dt)
    screen.fill((0, 0, 0))
    all_sprites.draw(screen)
    pygame.display.update()

En échangeant les méthodes update_time_dependent et update_frame_dependent dans la méthode update de la classe AnimatedSprite, vous pouvez basculer entre les deux techniques d'animation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn