最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
cocos2dx 菜单按钮
在 Cocos2d-x 开发中,菜单按钮是常见的交互组件。下面将详细介绍几种创建菜单按钮的方式,并贴出详细代码供大家参考和学习。若有疑问,可在社区留言,我会详细解答。
1. 创建只有字体的 Menu 按钮(无图片资源)
当没有图片资源时,若要创建一个只有字体的 Menu 按钮,可按以下步骤操作:
// 创建一个显示 "Exit" 文字的标签
CCLabelTTF *label = CCLabelTTF::create("Exit", "Arial", 20);
// 使用标签创建菜单项,点击时调用 HelloWorld 类的 menuExitGame 方法
CCMenuItemLabel *exit_game = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::menuExitGame) );
// 先将菜单项位置设为原点
exit_game->setPosition(CCPointZero);
// 再将菜单项移动到指定位置
exit_game->setPosition(size.width - 40, size.height - 40);
// 创建菜单并将菜单项添加进去
CCMenu* pMenu = CCMenu::create(exit_game, NULL);
以上步骤完成后,一个只有字体的 Menu 按钮就创建成功了。
2. 使用图片资源创建 Menu 菜单
若需要使用图片资源来创建具有自己风格的 Menu 菜单,可参考以下代码:
// 创建一个图片菜单项,指定正常和选中状态的图片,点击时调用 HelloWorld 类的 menuCallback 方法
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"NextLayeNormal.png", // 支持 png、jpg 等图片格式
"NextLayeSelected.png",
this,
menu_selector(HelloWorld::menuCallback)
);
// 若图片菜单项创建失败则中断
CC_BREAK_IF(! pCloseItem);
// 设置图片菜单项的位置
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 70, 30));
// 创建菜单并将图片菜单项添加进去
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
至此,使用图片资源的 Menu 菜单创建完成。
3. 使用 CCLabelAtlas 和 CCMenuItemFont 创建菜单
除了上述两种方式,还可以使用 CCLabelAtlas 和 CCMenuItemFont 来创建菜单。
使用 CCLabelAtlas
// 创建一个 CCLabelAtlas 标签
CCLabelAtlas *plabelAtals = CCLabelAtlas::create("0123456789", "labelatlas.png", 16, 24, '.');
// 设置标签颜色
plabelAtals->setColor(ccc3(250, 100, 0));
// 使用标签创建菜单项,点击时调用 MenuDemo 类的 font_callBack 方法
CCMenuItemLabel *atalsMenu = CCMenuItemLabel::create(plabelAtals, this, menu_selector(MenuDemo::font_callBack));
// 设置菜单项位置
atalsMenu->setPosition(ccp(size.width / 3, size.height / 2));
// 创建菜单并将菜单项添加进去
CCMenu *menu = CCMenu::create(atalsMenu, NULL);
// 设置菜单位置为原点
menu->setPosition(CCPointZero);
使用 CCMenuItemFont
// 设置菜单项字体名称
CCMenuItemFont::setFontName("Marker Felt");
// 创建一个字体菜单项,点击时调用 MenuDemo 类的 menuCallbackPriorityTest 方法
CCMenuItemFont *menufont = CCMenuItemFont::create("My test Menu", this, menu_selector(MenuDemo::menuCallbackPriorityTest));
// 设置菜单项颜色
menufont->setColor(ccc3(250, 100, 0));
// 设置菜单项位置
menufont->setPosition(ccp(size.width - 200, size.height / 2));
// 设置菜单位置为原点
menu->setPosition(CCPointZero);
// 将字体菜单项添加到菜单中
menu->addChild(menufont, 1);
// 将菜单添加到当前层
this->addChild(menu, 1);
4. 使用 CCMenuItemToggle 创建开关菜单
使用 CCMenuItemToggle 可以创建开关菜单,以下是示例代码:
void MyMenuItemToggleLayer::initLayer() {
// 获取窗口大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
// 创建背景精灵
CCSprite *bg = CCSprite::create("BG.jpg");
// 设置背景精灵位置
bg->setPosition(ccp(size.width / 2.0f, size.height / 2.0f));
// 将背景精灵添加到当前层
this->addChild(bg, 1);
// 设置菜单项字体名称
CCMenuItemFont::setFontName( "Marker Felt" );
// 设置菜单项字体大小
CCMenuItemFont::setFontSize(34);
// 创建 "On" 菜单项,点击时调用 MyMenuItemToggleLayer 类的 onCallBack 方法
CCMenuItemFont *on = CCMenuItemFont::create("On", this, menu_selector(MyMenuItemToggleLayer::onCallBack));
// 设置 "On" 菜单项位置
on->setPosition(ccp(400, 400));
// 创建 "Create" 菜单项,点击时调用 MyMenuItemToggleLayer 类的 createCallBack 方法
CCMenuItemFont *create = CCMenuItemFont::create("Create", this, menu_selector(MyMenuItemToggleLayer::createCallBack));
// 设置 "Create" 菜单项位置
create->setPosition(ccp(500, 500));
// 创建开关菜单项,点击时调用 MyMenuItemToggleLayer 类的 CallBack 方法
CCMenuItemToggle *toggle = CCMenuItemToggle::create(
this,
menu_selector(MyMenuItemToggleLayer::CallBack),
on,
create,
NULL
);
// 设置开关菜单项颜色
toggle->setColor(ccc3(255, 0 ,0));
// 设置开关菜单项位置
toggle->setPosition(ccp(size.width / 2.0f, size.height / 2.0f));
// 创建菜单并将开关菜单项添加进去
CCMenu *menu = CCMenu::create(toggle, NULL);
// 设置菜单位置为原点
menu->setPosition(CCPointZero);
// 将菜单添加到当前层
this->addChild(menu, 2);
}
通过以上代码,就可以创建一个开关菜单。