CCMenuITemを縦横等間隔に並べる


cocos2d(cocos2d-x)でゲームのタイトルや設定画面などで重宝するメニュー用のクラス「CCMenu」ですが、複数の項目を使用する場合には上図のように縦か横に並べることがほとんどだと思います。
その際に手動で位置調整をしてもいいのですが、簡単な方法がありますので紹介したいと思います。

縦にCCMenuITemを並べる場合: alignItemsVerticallyWithPadding
横にCCMenuITemを並べる場合: alignItemsHorizontallyWithPadding

というそのまんまの名前のメソッドがありますので、これを使うことで自動で並べてくれます。
Paddingなしの「alignItemsVertically」「alignItemsHorizontally」もありますが、アイテム同士の間隔が詰まりすぎてしまうので、こちらを使う機会はあまりないと思います。

cocos2d

cocos2d-menu-vertical.m
CGSize size = [[CCDirector sharedDirector] winSize];
CCMenu* menu = [CCMenu menuWithItems:itemStart, itemHowtoplay, nil];
menu.position = ccp(size.width / 2 , size.height / 2);
[menu alignItemsVerticallyWithPadding:32.0f];
cocos2d-menu-horizontally.m
CGSize size = [[CCDirector sharedDirector] winSize];
CCMenu* menu2 = [CCMenu menuWithItems:itemGameCenter, itemTwitter, itemFacebook, nil];
menu2.position = ccp(size.width / 2 , size.height / 3);
[menu2 alignItemsHorizontallyWithPadding:64.0f];

cocos2d-x

cocos2d-x-menu-horizontally.cpp
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCMenu*  pMenu = CCMenu::create(pStartItem, pStartRecord, pEtcGameItem, NULL);
pMenu->setPosition(ccp(winSize.width / 2, winSize.height / 2));
pMenu->alignItemsVerticallyWithPadding(30.0f);

ちなみに間隔を指定しない「alignItemsVertically」を使用した場合には下図のような感じになります。まあ、これはこれで悪くはないと思わなくもないですが、もうちょっと間隔を空けたいなぁと思ったら「alignItemsVerticallyWithPadding」を使うといいと思います。