!!! モジュール分けと階層化 <<{ball_layers.png} !!! ライブラリ モノと操作を実現するために, 直接 GTK, GDKを使ってプログラムするのでは, 抽象度が低く,考えにくく,間違えやすいので, アニメーションとイベントを提供する層を作成する. * ボールたちはスプライト * ペンギンは時間で変化する背景画像 * 背景画像でのマウスとキーボードイベント !!! アニメーション (参考) [[ball::アニメーションのライブラリ化]] 一定時間毎に,背景描画,スプライト描画を行う !! アニメーション領域データ構造 * 描画領域 * 背景画像 * 中にいるスプライト達 * イベント * タイムアウト関数 6< * ライブラリを変更することなく, * ライブラリを使う側で関数を用意できるように >9 !! アニメーション領域API * アニメーション領域の作成 * 背景画像を設定する * アニメーション領域の消去 !!! スプライト 一定時間毎に背景の上を動く !! スプライトのデータ構造 * のっているアニメーション領域 * 画像,大きさ,位置,向き,速さ * タイムアウト関数 !! スプライトAPI * 新しく生まれる * 動く * 消去 !!! マイイベント アニメーション領域で起こるマウスとキーボードイベントを取得し, ユーザ指定プログラムを呼び出す仕組みを提供する. !! マイイベントのデータ構造 * マウス移動イベントと処理関数へのポインタ * マウスボタンイベントと処理関数へのポインタ * キーボードイベントと処理関数へのポインタ !! マイイベントのAPI * 新しいマイイベントを作る * アニメーション領域にマイイベントを設定する