cocos2d-x CCMenuItem菜单项

Ccmenu这是一个抽象的东西,容纳菜单项CcmenuItem的容器....

CcmenuItem继承图:

由于testd对于CcmenuItem讲得非常详细了,于是我就直接取用test里么的例子,然后单独出一个项目出来,这样更有利于代码的阅读和学习,我怕乱,所以单独出来...呵呵!

由于内容有点多,我们就把重点知识贴出来,如果要独立出来的这个工程,可以在下面提供的地址进行下载,大部都写上注释了,重复的我就不写了....

  1. MenuTestLayer::MenuTestLayer(void)
  2. {
  3. //设置字体大小
  4. CcmenuItemFont::setFontSize(30);
  5. //根据名字设置字体
  6. CcmenuItemFont::setFontName("CourierNew");
  7. //设置能点击
  8. setTouchEnabled(true);
  9. //FontItem
  10. //参数说明:第一个图片名字,第二参数截图menuitemsprite.png的一个对象(x,y,w,h),说明此处的x,y为图片的坐标喔~
  11. CCSprite*spritenormal=CCSprite::create("menuitemsprite.png",CCRectMake(0,23*2,115,23));
  12. CCSprite*spriteSelected=CCSprite::create("menuitemsprite.png",23*1,23));
  13. CCSprite*spritedisabled=CCSprite::create("menuitemsprite.png",23*0,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important">
  14. //创建一个CcmenuItemSprite,参数:添加三种状态CCSprite,添加item1的节点,注册返回监听
  15. CcmenuItemSprite*item1=CcmenuItemSprite::create(spritenormal,spriteSelected,spritedisabled,this,menu_selector(MenuTestLayer::menuCallback));
  16. //创建一个CcmenuItemImage,参数:同上
  17. CcmenuItem*item2=CcmenuItemImage::create("SendscoreButton.png","SendscoreButtonpressed.png",//创建一个cclabelAtlas标签(Atlas一般是指图片集合),参数:内容(图片资源中存在,如果不存在,不显示),图片,宽,高
  18. cclabelAtlas*labelAtlas=cclabelAtlas::create("0123456789","fonts/labelatlas.png",16,24,'.');
  19. //创建一个CcmenuItemLebel标签
  20. CcmenuItemLabel*item3=CcmenuItemLabel::create(labelAtlas,menu_selector(MenuTestLayer::menuCallbackdisabled));
  21. item3->setdisabledColor(ccc3(32,32,64));//设置不能点击的颜色(一般采用灰色)
  22. item3->setColor(ccc3(200,200,255));//设置item3标签颜色
  23. //创建一个CcmenuItemFont
  24. CcmenuItemFont*item4=CcmenuItemFont::create("Itoggleenableitems",menu_selector(MenuTestLayer::menuCallbackEnable));
  25. item4->setFontSizeObj(20);
  26. item4->setFontName("MarkerFelt");
  27. //创建一个cclabelBMFont标签,参数:内容,字体配置fnt文件
  28. cclabelBMFont*label=cclabelBMFont::create("configuration","fonts/bitmapFontTest3.fnt");
  29. CcmenuItemLabel*item5=CcmenuItemLabel::create(label,menu_selector(MenuTestLayer::menuCallbackConfig));
  30. item5->setScale(0.8f);
  31. CcmenuItemFont::setFontName("MarkerFelt");
  32. CcmenuItemFont*item6=CcmenuItemFont::create("PriorityTest",menu_selector(MenuTestLayer::menuCallbackPriorityTest));
  33. CcmenuItemFont*item7=CcmenuItemFont::create("Quit",menu_selector(MenuTestLayer::onQuit));
  34. //为CcmenuItemFon添加一个颜色循环变化动画....item7也是父类CCNode的子类,自然也可以添加动画啦
  35. CCActionInterval*color_action=CCTintBy::create(0.5f,-255,-255);
  36. CCActionInterval*color_back=color_action->reverse();
  37. CCFiniteTimeAction*seq=CCSequence::create(color_action,color_back,NULL);
  38. item7->runAction(CCRepeatForever::create((CCActionInterval*)seq));
  39. //创建Ccmenu菜单,其他可认为是菜单
  40. Ccmenu*menu=Ccmenu::create(item1,item2,item3,item4,item5,item6,item7,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> menu->alignItemsvertically();//可以理解为设置成垂直排列
  41. //menu->alignItemsHorizontally();//水平排列
  42. //elasticeffect
  43. CCSizes=CCDirector::sharedDirector()->getWinSize();
  44. inti=0;
  45. CCNode*child;
  46. CCArray*pArray=menu->getChildren();
  47. CCObject*pObject=NULL;
  48. //将pArray里面的对象转成CCObject对象,原因获得坐标等信息
  49. CCARRAY_FOREACH(pArray,pObject)
  50. {
  51. if(pObject==NULL)
  52. break;
  53. child=(CCNode*)pObject;
  54. CCPointdstPoint=child->getPosition();
  55. intoffset=(int)(s.width/2+50);
  56. if(i%2==0)
  57. offset=-offset;
  58. child->setPosition(CCPointMake(dstPoint.x+offset,dstPoint.y));
  59. child->runAction(CCEaseElasticOut::create(CCMoveBy::create(2,CCPointMake(dstPoint.x-offset,0)),0.35f));
  60. i++;
  61. }
  62. m_disabledItem=item3;item3->retain();
  63. m_disabledItem->setEnabled(false);
  64. addChild(menu);
  65. menu->setPosition(ccp(s.width/2,s.height/2));
  66. }

呵呵~ 这里对于CcmenuItem是讲得比较全了....接下晚上来研究粒子系统...

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...