Grâce à Python et la SFML, il est très facile de mettre en place un système de classe animé : Les animations sont sous forme de dictionnaire pour les sélectionner facilement, le reste est automatique.

class bSprite(sf.Sprite):
    """
    Classe de base pour l'affichage de sprite
    """
    def __init__(self, x, y, z, image):
        """
        Initialise le sprite avec l'image et les coordonnées indiquées.
        """
        Sprite.__init__(self, image, x, y)
 
        self.z = z
        self.x = x
        self.y = y
        self.width, self.height = self.GetSize()
 
    def Move(self, x, y):
        """
        Move(self, x, y)
        Déplace le sprite de x, y pixels.
        """
        Sprite.Move(self, x, y)
        self.x += x
        self.y += y
 
    def SetPosition(self, x, y):
        """
        SetPosition(self, x, y)
        Positionne le sprite aux position x, y.
        """
        Sprite.SetPosition(self, x, y)
        self.x = x
        self.y = y
 
class bAnimatedSprite(bSprite):
    def __init__(self, x, y, z, animation_dic, curr_anim, anim_speed):
        """
        Initialise un sprite animé avec un dictionnaire d'animation de la forme : 
        { 'animation1':[image0, image1,...],
          'animation2':[image0,....] }
        curr_anim: l'animation de départ,
        anim_speed: le nombre d'images par secondes
        """
        bSprite.__init__(self, x, y, z, animation_dic[curr_anim][0])
        self.anims = animation_dic
        self.anim_speed = anim_speed
        self.currimg = 0
 
        self.__animlen = len(self.anims[curr_anim])
        self.__curr_anim = curr_anim
        self.__clamp = 0 #Stocke l'avancement du temps en dessous de 1
 
    def SetAnim(self, anim_name):
        """
        Change l'animation du sprite pour celle indiqué dans son dictionnaire.
        """
        self.__animlen = len(self.anims[anim_name])
        self.__curr_anim = anim_name
 
    def Update(self, frametime):
        """
        Met à jour l'animation en fonction du temps,
        à appeler à chaque tour de boucle.
        """
        last = self.currimg
        self.__clamp += frametime*self.anim_speed
 
        next_curr, self.__clamp = divmod(self.__clamp, 1)
        self.currimg = int(((self.currimg+next_curr)%self.__animlen))
 
        self.SetImage(self.anims[self.__curr_anim][self.currimg])
 
fr/sources/pyframe_anim_animated.txt · Last modified: 2009/03/09 08:05 by NoopyKs
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki