質問

私はネットワークをアニメーター(ナムの場合に使用したもの。

基本的には、ノードとして表される小さなドットに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()のスレッドを解放し、別のスレッド、   イベントます。

http://cairographics.org/threaded_animation_with_cairo/する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top