【cocos2d】CCMenuクラスで、ボタンを作成する方法

前回のブログのエントリーではCCLayerを使ったボタンの作成方法を紹介しました。 詳しくはこちらから。【cocos2d】自作のボタンを作成する方法1

今回はCCMenuクラスを利用したボタンの作成方法を紹介します。

ボタンを実装する

前回と同じように、ボタンを押し続けてもアクションを継続させるボタンを作成します。

まずはCCMenuItemSpriteクラスを使いメニューを作成します。 [c] CCSprite titem = [CCSprite spriteWithFile:@"button-left.png"]; CCSprite titem2 = [CCSprite spriteWithFile:@"button-left-hover.png"];

    CCSprite *ritem = [CCSprite spriteWithFile:@"button-right.png"];
    CCSprite *ritem2 = [CCSprite spriteWithFile:@"button-right.png-hover.png"];

    item = [CCMenuItemSprite itemWithNormalSprite:titem selectedSprite:titem2 target:self selector:@selector(endbutton)];
    item2 = [CCMenuItemSprite itemWithNormalSprite:ritem selectedSprite:ritem2 target:self selector:@selector(endbutton2)];

    CCMenu *menu = [CCMenu menuWithItems:item,item2,nil];
    [menu alignItemsHorizontally];
    [self addChild:menu];

[/c]

こんな感じに配置されます。

2013 5 13 00d

コードの解説

selectorで指定したメソッドがボタンを離した時に呼び出されます。 [c]

//endbuttonが呼び出されます

item = [CCMenuItemSprite itemWithNormalSprite:titem selectedSprite:titem2 target:self selector:@selector(endbutton)];

[/c]

ボタンを押し続ける処理を実装する

今のままでは、ボタンを押し続ける際には何もアクションを取ることができませんので、CCMenuItemSpriteクラスにあるisSelectedプロパティを利用します。 これは、ボタンが選択されている状態の場合にYESを返すプロパティです。これをループ内で利用してあげれば、ボタンを押している状態かどうか判断ができます。

実際にはこんな風に利用します。 [c]

//ループ内

//itemが押された状態かどうか。 if (item.isSelected) {

  //ここに押されている場合の処理を記述します。

}

//item2が押された状態かどうか。 if (item2.isSelected) {

  //ここに押されている場合の処理を記述します。

}

[/c]

これでボタンが作成できました。