« [cocos2d]CCLabelBMFontクラスの使い方 | トップページ | [iPhoneApp][ShifShif]落ち物パズル『しふしふ』リリース! »

2012年5月 6日 (日)

[cocos2d]CCMenuクラスを使って簡単にメニューを作ろう

(Xcode 4.3.2 、cocos2d 1.0.1)


こんにちは。

本日は、cocos2dで「メニュー」を作成する

"CCMenu"の使い方について説明します。


ゲームを作る上で「メニュー」の作成はかかせません。


「ゲームスタート」、「ハイスコア」、「ランキング」といったボタンを作成し、

ボタンをタップすると各画面へ移動・・・といった処理は、

"CCMenu"クラスを使えば簡単に実現できます。



CCMenuの構成


CCMenuクラスによるメニューは、選択するボタンである複数の"アイテム"と、

そのアイテムを纏めた"メニュー"で構成されます。


1つの"アイテム"は、ボタンとして表示する画像やラベル、ボタンをタップすると呼び出す関数を持ちます。

"アイテム"も一つのクラスで表現します。画像をボタンにするなら"CCMenuItemImage"クラスです。

画像、ラベル等、何をボタンにするかによってクラスが異なります。


以降、メニューを作成していきます。

3つのアイテムを持ったメニューで、ボタンはすべて画像を使用します。



① ボタン画像ファイルを作成する


ボタンとなる画像を作成します。

サンプルとして、以下の3つの画像を作成しました。

・image_item1.png
Image_item1
・image_item2.png
Image_item2
・image_item3.png
Image_item3


このファイルをプロジェクトに追加します。



② .hファイルの修正


ヘッダファイルに、ボタンをタップすることにより呼び出される関数を書きます。
以下、サンプルコードです。



③ .mファイルの修正


メソッドファイルに、メニュー作成の処理を書きます。
以下、サンプルコードです。



まず、メニューを構成するアイテムを作ります。一つのアイテムは以下のコードで作成しています。


第一引数はボタンとして使用する画像名を文字列形式で指定します。

第二引数(selectedImage:)ボタンを押しているときの画像名を文字列形式で指定します。

 ※サンプルでは同じ画像を指定しています。

第三引数(target:)はボタンをタップしたときに呼び出したい関数を持つクラスインスタンスをid型で指定します。

 ※サンプルでは自クラス内の関数を呼び出すので"self"を指定しています。

第四引数(selector:)は呼び出したい関数をSEL型で指定します。



メニューアイテムをすべて作成したら、
それらを纏めたメニューを作成します。


纏めたいメニューを引数に並べて書くだけです。

最後は必ず"nil"を入れなければなりません。



メニューをLayerに追加するまえに実行している以下のコードは、

メニューアイテムを表示する際、ボタンを縦に並べることを意味します。

これを行わないと、すべてのボタンが重なってしまいます。


alignItemsVerticallyによる縦の並べ方の間隔は固定ですが、

間隔を指定するalignItemsVerticallyWithPaddingメソッドも有ります。




④ビルド!!


以下のように、メニューが表示されます。

20120506_1


ボタンが押されたと認識する範囲は画像のサイズと同じになります。

サンプルではボタンのタップによって呼び出される関数にLogの書き出ししかしていませんが、

Sceneの移動処理を追加すれば「タイトル画面からゲーム画面へ移動」といった処理が可能です。



最後に

今回説明していませんが、他に以下のようなメニューアイテムを作成することが出来ます。
・文字列をボタンにする。
・ラベルをボタンにする。
・タップするたびにボタンを切り替える(トグルボタン)


以上です。


« [cocos2d]CCLabelBMFontクラスの使い方 | トップページ | [iPhoneApp][ShifShif]落ち物パズル『しふしふ』リリース! »

cocos2d」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [cocos2d]CCMenuクラスを使って簡単にメニューを作ろう:

« [cocos2d]CCLabelBMFontクラスの使い方 | トップページ | [iPhoneApp][ShifShif]落ち物パズル『しふしふ』リリース! »