2009-02-22 4 views
1

Je crée un animateur de réseau (similaire à nam, si vous l'avez déjà utilisé).Animations fluides utilisant GTK +

Fondamentalement, j'ai des nœuds représentés sous forme de petits points sur un DrawingArea GTK +, et je mets à jour les positions de ces nœuds et redessiner le DrawingArea dans une boucle.

L'animation qui en résulte est rapide, mais pas lisse (il y a beaucoup de scintillement). C'est probablement parce que je remplis le DrawingArea avec une couleur solide avant chaque image.

Comment croyez-vous que je peux le mieux résoudre ce problème? Dois-je pré-rendre les images sur Pixbufs? Y a-t-il une meilleure solution?

Voici mon code de dessin en cours (en utilisant PyGTK):

rect = self.drawing_area.get_allocation() 
style = self.drawing_area.get_style() 

pos = [n.position_at(self.t) for n in self.nodes] 

self.drawing_area.window.draw_rectangle(style.bg_gc[gtk.STATE_NORMAL], True, 
             0, 0, rect.width, rect.height) 

for p in pos: 
    self.drawing_area.window.draw_arc(style.fg_gc[gtk.STATE_NORMAL], True, 
             rect.width * (p.x/2400.0) - NODE_SIZE/2, 
             rect.height * (p.y/2400.0) - NODE_SIZE/2, 
             NODE_SIZE, NODE_SIZE, 
             0, 64 * 360) 

self.t est l'heure actuelle, qui est incrémenté dans la boucle.

Répondre

5

J'ai changé mon code pour rendre les images sur un Pixmap et remplacé le DrawingArea par une Image. Alors que cela a résolu le scintillement, maintenant l'utilisation du processeur a atteint un sommet. L'animation est encore assez rapide, mais je ne pense pas que cette méthode soit évolutive.

Temps pour une optimisation, je suppose.

MISE À JOUR: Il s'avère qu'exposer-event avec une image n'était pas une bonne idée. L'utilisation du processeur est revenue à la normale.