ゲームの実装を行う
駒の移動はCore Animation
GameBoardTileからその座標位置を得て、その座標にGameObjectViewを移動させる。駒を動かす処理はCore Animationで行っている。Core AnimationとはMac OS XやiOSで導入されている、UIにアニメーションを付加するための技術だ。Core Animationを利用することで簡単にビューの属性(位置やサイズ、透明度など)をアニメーションさせることができる。
以下がGameObjectViewに実装している位置移動のためのメソッドだ。駒を移動させるために CABasicAnimationというクラスを使っている。UIViewはCALayerクラスのlayerというプロパティーを持っており、このlayerの持つプロパティーに対してアニメーションをさせることができる。ここではそのビューの位置を示す position というプロパティーの設定を変更してアニメーション移動をさせている。
<GameObjectView での実装>
最初にアニメーションのためのオブジェクトを作成する、ここでは animationWithKeyPath: により、positionを指定している。
Core Animationではアニメーションの時間を秒単位で指定するのだが、それでは移動距離によって速度が違ってしまう、そのために速度(speed)をプロパティーとして持ち、移動の始点と終点から距離を割り出して速度と距離から一定になるように移動時間を求めている。
そしてその移動時間と移動元と移動先の位置をアニメーションのオブジェクトに設定し、それをUIViewが持つlayerに設定してやる。こうすることでアニメーションが開始される。
ただしこれだけでは実際にビューは移動してくれない、アニメーションが終わった後は元の位置に表示されてしまう、そのため最後に実際の位置を動かすようにレイヤーのframeを変更する。
そしてこの部分、アニメーションクラスのデリゲートに自分自身(GameObjectView)を設定している。
これにより以下のデリゲートメソッドを実装しておくことでアニメーションの終了時に通知を受けることができる。
gamePieceCAMoveEnd:Position:Finish: は自分自身(GameObjectView)が定義しているデリゲートメソッドだ、このメソッドで自分のデリゲートオブジェクト(GameController)に移動の終了を通知する。これが駒を移動させるための仕組みの基本だ。
今回のサンプル一式は、会員限定特典としてダウンロードできる。記事末尾をご確認いただきたい。
図2:駒移動のイベント伝達(クリックで拡大) |
次回はこれをどのように使って「Rabbit Maze」でキャラクターを制御しているのかを解説する予定だ。
「ゲームの実装を行う」サンプルプログラム