菜单栏这是游戏里面基本的控件来的,

头文件:

#include <CCMenu.h>                       

继承关系图:

 

头文件:

 #include <CCMenuItem.h>                       

继承关系图:

1 CCMenuItemLable

包括CCMenuItemAtlasFont和CCMenuItemFont是两种定义菜单项字体的方式,其中CCMenuItemFont是通过设定字体名称来设置字体,这个字体是系统自带的。CCMenuItemAtlasFont则是通过字体配置文件png文件,即配置文件所对应的图片。

2.CCMenuItemSprite 这个菜单项的特点就是可以封装图片进入菜单项

3.CCMenuItemToggle 可以将任意的CCMenuItem封装进去,作为一个按钮式的开关

示例代码:

CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{ // 'scene'是一个可以自动释放的对象
scene = CCScene::create();
//创建失败跳出循环
CC_BREAK_IF(! scene);
MenuLayer1 *layer = new MenuLayer1();
scene->addChild(layer);
} while ();
// 返回scene
return scene;
} MenuLayer1::MenuLayer1()
{
//设置默认字体的大小
CCMenuItemFont::setFontSize( );
//设置默认字体的名字
CCMenuItemFont::setFontName("Courier New");
// Font Item
// 创建三个精灵作为字体的三个状态
CCSprite* spriteNormal = CCSprite::create("cat.png", CCRectMake(,*,,));
CCSprite* spriteSelected = CCSprite::create("cat.png", CCRectMake(,*,,));
CCSprite* spriteDisabled = CCSprite::create("cat.png", CCRectMake(,*,,));
//dynamic_cast<CCNode*>(mgr)->addChild(spriteNormal);
//dynamic_cast<CCNode*>(mgr)->addChild(spriteSelected);
//dynamic_cast<CCNode*>(mgr)->addChild(spriteDisabled); //创建一个精灵菜单
CCMenuItemSprite* item1 = CCMenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(MenuLayer1::menuCallback) ); //创建一个图片的菜单栏项 Image Item
CCMenuItem* item2 = CCMenuItemImage::create("SendScoreButton.png", "SendScoreButtonPressed.png", this, menu_selector(MenuLayer1::menuCallback2) ); //创建一个label Label Item (LabelAtlas)
CCLabelAtlas* labelAtlas = CCLabelAtlas::create("", "fps_images.png", , , '.');
//创建一个label菜单栏
CCMenuItemLabel* item3 = CCMenuItemLabel::create(labelAtlas, this, menu_selector(MenuLayer1::menuCallbackDisabled) );
item3->setDisabledColor( ccc3(,,) );
item3->setColor( ccc3(,,) ); //创建一个字体的菜单栏 Font Item
CCMenuItemFont *item4 = CCMenuItemFont::create("I toggle enable items", this, menu_selector(MenuLayer1::menuCallbackEnable) ); item4->setFontSizeObj();
item4->setFontName("Marker Felt"); // Font Item
CCMenuItemFont* item5 = CCMenuItemFont::create("Quit", this, menu_selector(MenuLayer1::onQuit));
//创建一个颜色变化的动作
CCActionInterval* color_action = CCTintBy::create(0.5f, , -, -);
//逆向动作
CCActionInterval* color_back = color_action->reverse();
//创建一个动作的组合
CCFiniteTimeAction* seq = CCSequence::create(color_action, color_back, NULL);
//重复地运行该动作
item5->runAction(CCRepeatForever::create((CCActionInterval*)seq));
//创建菜单栏
CCMenu* menu = CCMenu::create( item1, item2, item3, item4, item5, NULL);
//垂直布局
menu->alignItemsVertically(); //创建菜单栏的弹跳效果 elastic effect
//获取屏幕的大小
CCSize s = CCDirector::sharedDirector()->getWinSize(); int i=;
CCNode* child;
CCArray * pArray = menu->getChildren();
CCObject* pObject = NULL;
//类似foreach循环
CCARRAY_FOREACH(pArray, pObject)
{
if(pObject == NULL)
break;
//转化为基类CCNode
child = (CCNode*)pObject;
//获取坐标,该坐标相对于左下角作为(0,0)参考点
CCPoint dstPoint = child->getPosition();
int offset = (int) (s.width/ + );
if( i % == )
offset = -offset; child->setPosition( CCPointMake( dstPoint.x + offset, dstPoint.y) );
child->runAction( // 创建弹跳效果的动画
CCEaseElasticOut::create(
CCMoveBy::create(, CCPointMake(dstPoint.x - offset,)), 0.35f
)
);
i++;
} m_disabledItem = item3; item3->retain();
//m_disabledItem->setIsEnabled( false ); addChild(menu); } void MenuLayer1::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, cocos2d::kCCMenuHandlerPriority+, true);
} MenuLayer1::~MenuLayer1()
{
m_disabledItem->release();
} void MenuLayer1::menuCallback(CCObject* sender)
{ } void MenuLayer1::menuCallbackConfig(CCObject* sender)
{ } void MenuLayer1::allowTouches(ccTime dt)
{
CCDirector::sharedDirector()->getTouchDispatcher()->setPriority(cocos2d::kCCMenuHandlerPriority+, this);
unscheduleAllSelectors();
CCLog("TOUCHES ALLOWED AGAIN");
} void MenuLayer1::menuCallbackDisabled(CCObject* sender)
{
// hijack all touch events for 5 seconds
CCDirector::sharedDirector()->getTouchDispatcher()->setPriority(cocos2d::kCCMenuHandlerPriority-, this);
schedule(schedule_selector(MenuLayer1::allowTouches), 5.0f);
CCLog("TOUCHES DISABLED FOR 5 SECONDS");
} void MenuLayer1::menuCallbackEnable(CCObject* sender)
{
m_disabledItem->setEnabled(! m_disabledItem->isEnabled() );
} void MenuLayer1::menuCallback2(CCObject* sender)
{
((CCLayerMultiplex*)m_pParent)->switchTo();
} void MenuLayer1::onQuit(CCObject* sender)
{
//[[Director sharedDirector] end];
//getCocosApp()->exit();
}

运行的效果:

最新文章

  1. 深入分析HTTP状态码502(nginx+php-fpm)
  2. HDU3571 N-dimensional Sphere(高斯消元 同模方程)
  3. c#序列化json字符串及处理
  4. (dp)343. Integer Break
  5. 01HTTP服务&amp;AJAX编程
  6. mysql 5.6.17 x64 安装
  7. 编写postgresql函数执行循环copy命令导入大数据
  8. UVa 437 (变形的LIS) The Tower of Babylon
  9. 自定义复选框 checkbox 样式
  10. Android设置View抖动动画
  11. Windows激活最高权限
  12. 分布式版本控制系统Git的安装与使用
  13. 实分析p78 两个解释
  14. Javascript 函数声明、函数表达式与匿名函数自执行表达式
  15. Set &quot;$USE_DEPRECATED_NDK=true&quot; in gradle.properties to continue using the current NDK integration. 解决办法
  16. [luogu3505][bzoj2088][POI2010]TEL-Teleportation【分层图】
  17. metasploit常用服务扫描和利用模块
  18. python面向对象高级:枚举
  19. ADO.NET 连接池 Session 状态分析
  20. jboss eap6.1(5)(ejb升级)

热门文章

  1. Linux下tomcat服务
  2. HDOJ 2097
  3. 杭电hdoj题目分类
  4. 如何使用setup.py文件
  5. 《ASP.NET MVC4 WEB编程》学习笔记------Model模型绑定
  6. ASP.NET小知识
  7. Django之admin界面恢复及添加数据模型
  8. iOS UITableView 的beginUpdates和endUpdates
  9. Java for LeetCode 169 Majority Element
  10. Java for LeetCode 034 Search for a Range