質問
私はネットワークをアニメーター(ナムの場合に使用したもの。
基本的には、ノードとして表される小さなドットにGTK+DrawingArea、更にこれらのノードと再描画のDrawingArea、ループを実行します。
この結果、アニメーションが速く、滑らかなりのコミュニケーションも楽しみのフリッカ).これからのDrawingAreaソリッドカラーの前に各フレーム。
かえるのではないかと思っていベストに取り組むのですが。すべIの事前の描画のフレームを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
は、現時点で増分します。
解決
私は、コードを描画するのにはフレームをPixmap、交換のDrawingAreaとイメージです。
この解決の明滅現在のCPU使用量は頭打ちである。アニメーションは非常に速く、がいいかもしれませんがこの方法は、ラブル。
時間の一部の最適化によるものだと考えられます。
更新: も利用露光-イベントをイメージんな良い方法がありました。CPU使用をしています。
他のヒント
公開・イベント処理について、カイロ+のGtkとアニメーションの最初の段落をチェックアウト:P
カイロやGTK +とのマルチスレッドアニメーションの
と複雑なアニメーション カイロとGTK +は、ラグのインターフェイスにつながることができます。これは、 gtk_main()スレッドが単一のループで実行されます。だから、あなたのdo_draw場合は() 機能は、複雑な描画コマンドを実装し、それが呼ばれています gtk_main()スレッドから()(on_window_expose_eventで言います 機能)、あなたのGTKコードの残りの部分はまでブロックされます do_draw()関数が終了します。結果的に、メニュー項目、マウス クリック、さらには閉じるボタンイベントが処理されるが遅くなり、 あなたのインターフェイスは、ラグを感じるでしょう。一つの解決策は、にすべてのプロセッサ集約型図面をハンドオフします これに対応するためのgtk_main()のスレッドを解放し、別のスレッド、 イベントます。