Ccmenu这是一个抽象的东西,容纳菜单项CcmenuItem的容器....
CcmenuItem继承图:
由于testd对于CcmenuItem讲得非常详细了,于是我就直接取用test里么的例子,然后单独出一个项目出来,这样更有利于代码的阅读和学习,我怕乱,所以单独出来...呵呵!
由于内容有点多,我们就把重点知识贴出来,如果要独立出来的这个工程,可以在下面提供的地址进行下载,大部都写上注释了,重复的我就不写了....
- MenuTestLayer::MenuTestLayer(void)
- {
- //设置字体大小
- CcmenuItemFont::setFontSize(30);
- //根据名字设置字体
- CcmenuItemFont::setFontName("CourierNew");
- //设置能点击
- setTouchEnabled(true);
- //FontItem
- //参数说明:第一个图片名字,第二参数截图menuitemsprite.png的一个对象(x,y,w,h),说明此处的x,y为图片的坐标喔~
- CCSprite*spritenormal=CCSprite::create("menuitemsprite.png",CCRectMake(0,23*2,115,23));
- CCSprite*spriteSelected=CCSprite::create("menuitemsprite.png",23*1,23));
- 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">
- //创建一个CcmenuItemSprite,参数:添加三种状态CCSprite,添加item1的节点,注册返回监听
- CcmenuItemSprite*item1=CcmenuItemSprite::create(spritenormal,spriteSelected,spritedisabled,this,menu_selector(MenuTestLayer::menuCallback));
- //创建一个CcmenuItemImage,参数:同上
- CcmenuItem*item2=CcmenuItemImage::create("SendscoreButton.png","SendscoreButtonpressed.png",//创建一个cclabelAtlas标签(Atlas一般是指图片集合),参数:内容(图片资源中存在,如果不存在,不显示),图片,宽,高
- cclabelAtlas*labelAtlas=cclabelAtlas::create("0123456789","fonts/labelatlas.png",16,24,'.');
- //创建一个CcmenuItemLebel标签
- CcmenuItemLabel*item3=CcmenuItemLabel::create(labelAtlas,menu_selector(MenuTestLayer::menuCallbackdisabled));
- item3->setdisabledColor(ccc3(32,32,64));//设置不能点击的颜色(一般采用灰色)
- item3->setColor(ccc3(200,200,255));//设置item3标签颜色
- //创建一个CcmenuItemFont
- CcmenuItemFont*item4=CcmenuItemFont::create("Itoggleenableitems",menu_selector(MenuTestLayer::menuCallbackEnable));
- item4->setFontSizeObj(20);
- item4->setFontName("MarkerFelt");
- //创建一个cclabelBMFont标签,参数:内容,字体配置fnt文件
- cclabelBMFont*label=cclabelBMFont::create("configuration","fonts/bitmapFontTest3.fnt");
- CcmenuItemLabel*item5=CcmenuItemLabel::create(label,menu_selector(MenuTestLayer::menuCallbackConfig));
- item5->setScale(0.8f);
- CcmenuItemFont::setFontName("MarkerFelt");
- CcmenuItemFont*item6=CcmenuItemFont::create("PriorityTest",menu_selector(MenuTestLayer::menuCallbackPriorityTest));
- CcmenuItemFont*item7=CcmenuItemFont::create("Quit",menu_selector(MenuTestLayer::onQuit));
- //为CcmenuItemFon添加一个颜色循环变化动画....item7也是父类CCNode的子类,自然也可以添加动画啦
- CCActionInterval*color_action=CCTintBy::create(0.5f,-255,-255);
- CCActionInterval*color_back=color_action->reverse();
- CCFiniteTimeAction*seq=CCSequence::create(color_action,color_back,NULL);
- item7->runAction(CCRepeatForever::create((CCActionInterval*)seq));
- //创建Ccmenu菜单,其他可认为是菜单项
- 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();//可以理解为设置成垂直排列
- //menu->alignItemsHorizontally();//水平排列
- //elasticeffect
- CCSizes=CCDirector::sharedDirector()->getWinSize();
- inti=0;
- CCNode*child;
- CCArray*pArray=menu->getChildren();
- CCObject*pObject=NULL;
- //将pArray里面的对象转成CCObject对象,原因获得坐标等信息
- CCARRAY_FOREACH(pArray,pObject)
- {
- if(pObject==NULL)
- break;
- child=(CCNode*)pObject;
- CCPointdstPoint=child->getPosition();
- intoffset=(int)(s.width/2+50);
- if(i%2==0)
- offset=-offset;
- child->setPosition(CCPointMake(dstPoint.x+offset,dstPoint.y));
- child->runAction(CCEaseElasticOut::create(CCMoveBy::create(2,CCPointMake(dstPoint.x-offset,0)),0.35f));
- i++;
- }
- m_disabledItem=item3;item3->retain();
- m_disabledItem->setEnabled(false);
- addChild(menu);
- menu->setPosition(ccp(s.width/2,s.height/2));
- }
呵呵~ 这里对于CcmenuItem是讲得比较全了....接下晚上来研究粒子系统...