ゲームの実装を行う

2011年4月18日(月)
北村 真二

駒の移動は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」でキャラクターを制御しているのかを解説する予定だ。

  • 「ゲームの実装を行う」サンプルプログラム

STUDIO SHIN

家庭用ゲームの企画開発、Mac OS / iOSアプリの開発を主な生業とする。
20年ほど前から家庭用ゲーム開発に携わりファミコンからDS、PSP、Wiiまで幅広く開発。15年前からMac OS Xアプリケーションを開発「DotShotX」「GIFQuickMaker」などを公開。iPhoneアプリ「将棋盤」「DotTouch」「Rabbit Maze」などを開発。開発アプリはアップルのApp Storeで公開中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています