cocos2d メニューの作成

メニュー作成

CCMenuを使ってゲームのタイトル画面みたいなシーンを作る

■CCMenu

メニュー生成の流れ

・CCMenuItemオブジェクトでメニュー内容を定義

・メニューをタグ付けする(必要であれば)

・メニューを垂直or平行方向のどちらかに設定

・設置場所を設定

・addChildでメニューを追加

■サンプルコード

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface SampleLayer : CCLayer
{
}

+(CCScene *) scene;

@end
#import "SampleLayer.h"

@implementation SampleLayer

/**
 * 
 * シーン取得
 * 
 **/
+(CCScene *) scene
{
	// シーン生成
	CCScene *scene = [CCScene node];
	// レイヤー生成
	SampleLayer *layer = [SampleLayer node];
	// シーンにレイヤーを追加
	[scene addChild:layer];
	
	// シーンを返す
	return scene;
}


/**
 * 
 * 初期処理
 * 
 **/
-(id) init
{
	if(self = [super init])
	{
		// 操作メニュー表示
		[self setControlPanel];
	}
	
	return self;
}


/**
 * 
 * 操作パネル表示
 * 
 **/
-(void) setControlPanel
{
    // メニュー生成(Start)
	CCMenuItemFont *item_1 = [CCMenuItemFont
                            itemWithString:@"Start"
                            // pushActionメソッドを呼ぶ
                            target:self
                            selector:@selector(pushAction:)
                            ];
    
	// メニュー生成(Continue)
	CCMenuItemFont *item_2 = [CCMenuItemFont
                            itemWithString:@"Continue"
                            // pushActionメソッドを呼ぶ
                            target:self
                            selector:@selector(pushAction:)
                            ];
    
	
	// メニュー生成(Option)
	CCMenuItemFont *item_3 = [CCMenuItemFont
                            itemWithString:@"Option"
                            // メソッドを呼ばずにそのまま処理を記述することも可能
                            block:^(id sender)
                              {
                                // 設定画面にシーン切り替え
                                CCLOG(@"Tap: Option");
//                                CCTransitionFlipX *trans = [CCTransitionFlipX transitionWithDuration:1.0 scene:[Option scene]];
//                                [[CCDirector sharedDirector] replaceScene:trans];
                              }
                            ];
	
	// メニュー生成(Exit)
	CCMenuItemFont *item_4 = [CCMenuItemFont
                              itemWithString:@"Exit"
                              // pushActionメソッドを呼ぶ
                              target:self
                              selector:@selector(pushAction:)
                              ];
    
    
	// 各メニューをタグ付けする
	item_1.tag = 1;
	item_2.tag = 2;
	item_4.tag = 4;
	
	// CCMenuを生成
	CCMenu *menu = [CCMenu
                    menuWithItems:
                    item_1,
                    item_2,
                    item_3,
                    item_4,
                    nil
                    ];
	
	// 垂直方向に20ポイント間隔に整列
	[menu alignItemsVerticallyWithPadding:20];
	
	// 画面サイズを取得
	CGSize win_size = [[CCDirector sharedDirector] winSize];
	
	// 座標を設定
	[menu setPosition:ccp(win_size.width / 2, win_size.height / 2)];
	
	// メニューを追加
	[self addChild:menu];
}


/**
 * 
 * メニュー押下処理
 * 
 **/
-(void) pushAction:(id) sender
{
	// タグ情報を元にどのボタンが押下されたか判定
	switch([sender tag])
	{
		case 1:
			// 開始シーンに切り替え
			CCLOG(@"Tap: Start");
//			CCTransitionFlipX *trans = [CCTransitionFlipX transitionWithDuration:1.0 scene:[GameLayer scene]];
//			[[CCDirector sharedDirector] replaceScene:trans];
			break;
		case 2:
			// 続きのシーンに切り替え
			CCLOG(@"Tap: Continue");
//			CCTransitionFlipX *trans = [CCTransitionFlipX transitionWithDuration:1.0 scene:[GameLayer scene]];
//			[[CCDirector sharedDirector] replaceScene:trans];
			break;
		case 4:
			// アプリ終了
			CCLOG(@"Tap: Exit");
            break;
		default:
			CCLOG(@"error...");
            break;
	}
}

@end

■実行画面
cocos2d017

■各メニューをタップした際のログ
cocos2d018

Comments are closed.