ソフトウェア設計及び演習2017

GDK2017::アニメーション

アニメーション

基本はパラパラ漫画

  1. 背景を描く
  2. スプライトを動かす
  3. スプライトを描く
  4. 1.にもどる

GDKでアニメーション

  • タイムアウトと背景を設定する GDK2017::タイムアウト GDK2017::背景
    • タイムアウトはgtk_main()でイベント待ち中に、一定の時間間隔で関数を呼び出す
    • 背景はconfigure_eventのコールバックで設定
      • configure_eventはウィジェットが最初に作成されたときを含む、サイズが変更されたときに起こる
  1. タイムアウトの発生 GDK2017::タイムアウト
  2. 背景でクリア GDK2017::背景
  3. スプライトをドローイングエリアにコピー GDK2017::スプライト GDK2017::透明な画像

サンプル

ソースプログラムの所在
ファイルリスト
typedef struct {
  GtkWidget *drawing_area;  // スプライトを動かすフィールドに相当するドローイングエリア
  gint timeout;                      // アニメーションのタイムアウト(g_timeout_addの戻り値).
                                          // g_timeout_addで設定した時間ごとに,drawing_areaにs_pixbufが描かれる
  GdkPixbuf *s_pixbuf;         // スプライト用のピクスバッファ
  gint s_width;                 // スプライト幅
  gint s_height;                // スプライト高さ
  gint x, y, dx, dy;            // スプライトの現在位置座標,ベクトル(次のタイムアウトで進む方向)
  gint s_timeout;               // スプライト自身がアニメーションするような場合のタイムアウト.回る地球とか
  GdkPixbufAnimationIter *iter; // s_timeoutを使う場合に用いるイテレータ
} anime_pack;
  • animation.c
    • いろいろなアニメーションのサンプル.GDKでアニメーションgifを読む,ボールが動く,アニメーションgifが動く,キャラクターが動く,など.

実行手順

 # svnからexportする(実行した直下にanimationディレクトリができる)
 svn export https://svn.cis.iwate-u.ac.jp/svn/csd/kimura/animation
 
 #持ってきたディレクトリに移動
 cd animation
 
 #make
 make
 
 #実行
 ./animation

参考

  • my_animation_earth()の構造


最終更新日:2017/05/26 12:30:35