Android で 2D アニメーション

Beginning Android Game Programming というドキュメントを見つけてて参考になったのでこちらで解説にトライしてみます。

とりあえず

クラス図とかを書いてみたんですが、キタナい上に字が薄いです。
AndroidTutorial
仕方が無いので箇条書き (?) で試みてみます。

  • AndroidTutorial クラス
    • アニメーションが表示される Activity になります
    • 内部クラスの AndroidTutorialPanel な無名オブジェクトを setContentView メソドに渡しています
      • これにより SurfaceHolder.Callback なメソドが呼び出されます
      • SurfaceHolder.Callback なメソド実装は DrawablePanel となります
  • DrawablePanel クラス
    • ISurface インターフェースを実装
    • abstract なクラスです (ISurface なメソドを実装していない)
    • SurfaceHolder.Callback なメソドを実装している
    • AnimationThread なオブジェクトを持っていて、その開始と終了を行なっている
  • AnimationThread クラス
    • run メソドのループの中で以下なメソドを呼び出し
      • ISurface#onInitialize()
      • ISurface#onDraw()
      • ISurface#onUpdate()
    • これらのメソドは AndroidTutorialPanel で実装されている
  • その他
    • ISurface インターフェースのメソドは上記の通り、AndroidTutorialPanel で実装
    • それぞれ AnimatedSprite クラスのメソドを呼び出しているのみ
    • AnimatedSprite クラスで描画処理が記述されている
    • AndroidTutorialPanel で描画処理が記述されていても良いかもしれないが、こういった形での移譲もありと言えばあり

インターフェースでプログラムしているあたりが何とも言えない味を出しております。

追記

この記事の例を見るに、SurfaceView を継承していれば onTouchEvent() メソドが override できる模様。この方式の場合、AndroidTutorialPanel に onTouchEvent を定義して AnimatedSprite に新しいメソド作ってそれを呼び出す形になるんかな。