我创建了一个网络动画(与之前的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
是当前的时间,这是在循环递增。