2009-02-22 114 views
1

我創建了一個網絡動畫(與之前的nam相似,如果您以前使用過)。使用GTK +平滑動畫+

基本上,我在GTK + DrawingArea上有節點表示爲小點,我更新這些節點的位置,並在一個循環中重繪DrawingArea。

由此產生的動畫是快速,但不光滑(有很多閃爍)。這可能是因爲我在每幀之前使用純色填充了DrawingArea。

您如何看待我最好的解決方案?我應該預先渲染幀到Pixbufs上嗎?有更好的解決方案嗎?

這裏的(使用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是當前的時間,這是在循環遞增。

回答

5

我改變了我的代碼,將幀渲染到Pixmap上,並將DrawingArea替換爲Image。

雖然這解決了閃爍現在CPU使用率已達到峯值。動畫仍然很快,但我不認爲這種方法是可擴展的。

我想,有一些優化的時間。

更新:事實證明,使用與圖像公開事件並不是一個好主意。 CPU使用率恢復正常。