当前位置:  开发笔记 > 编程语言 > 正文

使用GTK +平滑动画

如何解决《使用GTK+平滑动画》经验,为你挑选了1个好方法。

我正在创建一个网络动画师(类似于nam,如果你之前使用过它).

基本上,我在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是当前时间,它在循环中递增.



1> Can Berk Güd..:

我更改了代码以将帧渲染到Pixmap上,并将DrawingArea替换为Image.

虽然这解决了闪烁问题,但现在CPU使用率达到了顶峰.动画仍然很快,但我不认为这种方法是可扩展的.

我想是时候进行一些优化了.

更新:事实证明,使用带有图像的expose-event并不是一个好主意.CPU使用率恢复正常.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有