2 votes

wx.Timer pour l'animation

Animation simple, cela fonctionne mais les données de l'image remplacée restent-elles dans le tampon ? L'utilisation d'une minuterie pour l'animation est-elle nuisible au processeur ? Je veux dire par exemple self.timer.Start(25) réalise des animations sympas à partir de fichiers images individuels.

self.nm = ['01.png', '02.png', '03.png', '04.png']
self.stop = 0

def time(self, event):
    self.count += 1
    if self.count == 1:
        self.anime = wx.StaticBitmap(self, -1, wx.Bitmap(self.nm[self.stop], wx.BITMAP_TYPE_ANY))
    if self.count == 2:
        self.anime.Show(0)
        if self.stop == 3:
            self.timer.Stop()
        else:
            self.stop+=1
            self.count = 0
    event.Skip()

1voto

Etienne Perot Points 1856

Premièrement, vous rechargez effectivement chaque image à chaque fois qu'elle doit être affichée. Oui, c'est très mauvais, car cela représente beaucoup d'entrées/sorties sur le disque, et le disque est probablement le périphérique le plus lent avec lequel votre programme doit interagir. Évitez d'utiliser le disque à tout prix lorsque vous le pouvez.

Maintenant, pour pallier à cela, quelques options :

  • Créez votre propre sous-classe de wx.animate.Animation pour qu'il corresponde à votre animation (il faut remplacer certaines méthodes de l'application wx.animate.Animation mais aussi de wx.animate.AnimationBase . C'est la bonne solution à ce problème, mais ce n'est pas la plus simple.
  • Utilice wx.animate.AnimationCtrl si votre animation peut être convertie en un fichier .gif sans perte acceptable de détails. Cette solution est légèrement plus facile que la précédente, puisque vous n'avez pas à écrire de code d'animation.
  • Conservez les bitmaps en mémoire ; stockez-les simplement dans une liste quelque part ("quelque part" ne signifie pas à l'intérieur de l'espace de travail de l'utilisateur). time elle-même, car elle serait toujours rechargée à chaque fois que la fonction time est appelé ; "quelque part" signifie en tant que membre de l'objet que le time fait partie de la fonction).
  • Conservez tous les bitmaps dans l'interface utilisateur, et basculez simplement la visibilité entre eux lorsque vous devez changer de cadre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X