示例#1
0
    def refreshAnimation(self):
        """
        Met à jour l'image principale de l'arène, lorsque l'avancement d'un (ou plusieurs)
        cycle d'animation a fait que l'image doit être changée.
        La fonction ne rafraîchit pas toute l'arène. Mais elle rafraîchit toutes les zones
        comportant des éléments animés, qu'elles ait changée ou pas.
        Ex : supposons une arène avec 2 marbles, l'une qui bouge horizontalement, l'autre
        verticalement. On avance d'un cycle d'anim, ça fait déplacer la marble bougeant
        horizontalement. Mais pas l'autre.
        Eh bien cette fonction va rafraîchir les deux zones à rafraîchir, concernant ces
        deux marbles.
        not TRODO : On pourrait optimiser en ne rafraîchissant vraiment que le strict
        nécessaire. Mais pas envie, et pas trop besoin. C'est pas ça qui va niquer les 
        performances. (Nous sommes en f*****g mode texte, je rappelle).
        """
        # Rafraîchissement de toutes les images des Components dont les positions sont
        # mentionnés dans self.listPosTileToRefresh.
        for posArena in self.listPosTileToRefresh:
            posScreen = posScreenFromPosArenaTile(posArena)
            component = self.arena.getComponent(posArena)
            img = self.componentDisplayer.imgFromComponent(component)
            self.blitImg(posScreen, img)

        # Rafraîchissement de toutes les marbles en mouvement, et qui ne font pas partie
        # de la liste des marbles à cacher.
        # On parcourt tous les éléments décrivant les mouvements de marble.
        for movMarbleInfo in self.listMovMarbleInfo:
            # Je récupère pas d'un coup toutes les infos décrivant un mouvement de marble.
            # Car je n'ai pas besoin de tout. (L'offset de déplacement et la période : osef).
            marble = movMarbleInfo[0]
            if marble not in self.listMarbleHidden:
                posScreen = movMarbleInfo[1]
                self.blitImg(posScreen, IMG_MARBLE)

        # Rafraîchissement de tous les simpleSprite en cours d'affichage.
        for simpleSprite in self.listSimpleSprite:
            self.blitImg(simpleSprite.posScreen, simpleSprite.getCurrentImg())
示例#2
0
    def refreshAllScreen(self):
        """
        Réactualise tout le contenu de la grande image de l'arène.
        Attention ! Cette fonction ne doit pas être appelée pendant qu'on est en train
        de dérouler des cycles d'animation. Car ça n'afficherait pas tout comme il faut.
        On ne doit l'appeler que pendant la résolution d'un cycle de jeu.
        La fonction réaffiche tous les Components, et toutes les marbles.
        """
        # On parcourt tous les Component de l'arène
        # TRODO : need a crawler, pour parcourir plus classieusement ?
        for y in xrange(self.arena.height):
            for x in xrange(self.arena.width):
                posArena = pyRect(x, y)
                posScreen = posScreenFromPosArenaTile(posArena)
                component = self.arena.getComponent(posArena)
                # Détermination de l'image correspondant au Component en cours à afficher.
                # not TRODO : on pourrait garder ces images en mémoire, quelque part. Pour
                # ne pas avoir à redéterminer l'image à chaque fois. On va pas le faire, car ça
                # ralentit pas trop (on est en mode texte !). De plus, certaines images de
                # Components pourront changer au cours du jeu. (ex : switch, reset, ...)
                img = self.componentDisplayer.imgFromComponent(component)
                # Blit de l'image du Component sur l'image principale de l'arène.
                self.blitImg(posScreen, img)

        # On parcourt toutes les marbles de l'arène, et on les affiche.
        # On tient pas compte des marble hidden, ni des marble en mouvement. Il est pas
        # censé y avoir ce genre de trucs lorsqu'on n'est pas en train de dérouler une anim.
        for marble in self.arena.listMarble:
            posScreen = posScreenFromPosArenaMarble(marble.pos)
            self.blitImg(posScreen, IMG_MARBLE)

        # On parcourt tous les SimpleSprite, et on les affiche.
        # En fait ça sert à rien mais pour l'instant. Car pas de SimpleSprite si pas pendant
        # une anim. Mais peut-être pour plus tard.
        for simpleSprite in self.listSimpleSprite:
            self.blitImg(simpleSprite.posScreen, simpleSprite.getCurrentImg())