我正在创建一个网络动画师(类似于 nam,如果您以前使用过它)。
基本上,我将节点表示为 GTK+ DrawingArea 上的小点,我更新这些节点的位置并在循环中重绘 DrawingArea。
生成的动画很快,但不流畅(有很多闪烁)。这可能是因为我在每一帧之前用纯色填充了 DrawingArea。
你认为我怎样才能最好地解决这个问题?我应该将帧预渲染到 Pixbuf 上吗?有更好的解决方案吗?
这是我当前的绘图代码(使用 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)
whereself.t
是当前时间,在循环中递增。