Cocos2d-X中能够讲菜单和动作结合起来使用实现菜单特效
程序实例1:使用菜单和动作的组合实现菜单特效《一》
#include "MenuItem.h" CCScene* MenuItem::scene() { CCScene* scene = CCScene::create(); MenuItem* layer = MenuItem::create(); scene->addChild(layer); return scene; } bool MenuItem::init() { //初始化父类层 CCLayer::init(); //得到窗体的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果,Menu仅仅是一个容器) CCMenu* menu = CCMenu::create(); //加入Menu addChild(menu); //创建一个仅仅显示文本的菜单项 CCMenuItemFont* itemFont = CCMenuItemFont::create("This is Font"); //加入菜单项 menu->addChild(itemFont); //创建一个带有艺术字体的菜单 CCMenuItemAtlasFont* itemAtlas = CCMenuItemAtlasFont::create("123456", "labelatlasimg.png", 24, 32, '0'); //加入菜单项 menu->addChild(itemAtlas); //创建带有图片的菜单项 CCMenuItemImage* itemImage = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png"); //加入菜单项 menu->addChild(itemImage); //用标签创建菜单项 CCMenuItemLabel* itemLabelTTF = CCMenuItemLabel::create( CCLabelTTF::create("This is Label TTF item", "Arial", 36) ); //加入菜单项目 menu->addChild(itemLabelTTF); //用标签创建菜单项,而且实现显示彩色的文本 CCMenuItemLabel* itemLabelAtlas = CCMenuItemLabel::create( CCLabelAtlas::create("123456", "labelatlasimg.png", 24, 32, '0') ); //加入菜单项 menu->addChild(itemLabelAtlas); //用艺术字体创建菜单项 CCMenuItemLabel* itemLabelBMFont = CCMenuItemLabel::create( CCLabelBMFont::create("This is BMFONT item", "bitmapFontTest.fnt") ); //加入菜单项 menu->addChild(itemLabelBMFont); //用精灵创建菜单项 CCMenuItemSprite* itemSprite = CCMenuItemSprite::create( CCSprite::create("CloseNormal.png"), CCSprite::create("CloseSelected.png")); //加入菜单项 menu->addChild(itemSprite); //创建能够来回切换的菜单 //创建菜单项的选项 CCMenuItem* subItem1 = CCMenuItemFont::create("ON"); CCMenuItem* subItem2 = CCMenuItemFont::create("OFF"); CCMenuItem* subItem3 = CCMenuItemFont::create("ON/OFF"); //菜单项中加入选项 CCMenuItemToggle* itemToggle = CCMenuItemToggle::create(subItem1); itemToggle->addSubItem(subItem2); itemToggle->addSubItem(subItem3); //加入菜单项 menu->addChild(itemToggle); //自己主动对齐菜单项 menu->alignItemsVertically(); //实现菜单出场效果 //第一个菜单从窗体左边进入,第二个从右边进入。以此类推 //创建一个数组保存菜单项 CCArray* arr = menu->getChildren(); CCObject* obj; //用于遍历菜单项 int index = 0; CCARRAY_FOREACH(arr, obj) { //强制类型转换呢(将菜单项的类型转换成同样的类型) CCMenuItem* item = (CCMenuItem*)obj; if (index % 2 == 0) { //设置菜单项的位置(将菜单设置在窗体的最左边) item->setPositionX(item->getPositionX() - winSize.width); //移动菜单(设置菜单从左往右移动) //第一个參数:菜单移动的时间 //第二个參数:菜单移动后的位置 CCMoveBy* moveBy = CCMoveBy::create(10, ccp(winSize.width, 0)); item->runAction(moveBy); } else { //把移动到右边 item->setPositionX(item->getPositionX() + winSize.width); //移动菜单(设置菜单从右往左移动) //第一个參数:菜单移动的时间 //第二个參数:菜单移动后的位置 CCMoveBy* moveBy = CCMoveBy::create(10, ccp(-winSize.width, 0)); item->runAction(moveBy); } index++; } return true; }
运行结果:
程序实例2:使用菜单和动作的组合实现菜单特效《二》
#include "MenuItem.h" CCScene* MenuItem::scene() { CCScene* scene = CCScene::create(); MenuItem* layer = MenuItem::create(); scene->addChild(layer); return scene; } bool MenuItem::init() { //初始化父类层 CCLayer::init(); //得到窗体的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Menu(看不到效果,Menu仅仅是一个容器) CCMenu* menu = CCMenu::create(); //加入Menu addChild(menu); //创建一个仅仅显示文本的菜单项 CCMenuItemFont* itemFont = CCMenuItemFont::create("This is Font"); //加入菜单项 menu->addChild(itemFont); //创建一个带有艺术字体的菜单 CCMenuItemAtlasFont* itemAtlas = CCMenuItemAtlasFont::create("123456", "labelatlasimg.png", 24, 32, '0'); //加入菜单项 menu->addChild(itemAtlas); //创建带有图片的菜单项 CCMenuItemImage* itemImage = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png"); //加入菜单项 menu->addChild(itemImage); //用标签创建菜单项 CCMenuItemLabel* itemLabelTTF = CCMenuItemLabel::create( CCLabelTTF::create("This is Label TTF item", "Arial", 36) ); //加入菜单项目 menu->addChild(itemLabelTTF); //用标签创建菜单项。而且实现显示彩色的文本 CCMenuItemLabel* itemLabelAtlas = CCMenuItemLabel::create( CCLabelAtlas::create("123456", "labelatlasimg.png", 24, 32, '0') ); //加入菜单项 menu->addChild(itemLabelAtlas); //用艺术字体创建菜单项 CCMenuItemLabel* itemLabelBMFont = CCMenuItemLabel::create( CCLabelBMFont::create("This is BMFONT item", "bitmapFontTest.fnt") ); //加入菜单项 menu->addChild(itemLabelBMFont); //用精灵创建菜单项 CCMenuItemSprite* itemSprite = CCMenuItemSprite::create( CCSprite::create("CloseNormal.png"), CCSprite::create("CloseSelected.png")); //加入菜单项 menu->addChild(itemSprite); //创建能够来回切换的菜单 //创建菜单项的选项 CCMenuItem* subItem1 = CCMenuItemFont::create("ON"); CCMenuItem* subItem2 = CCMenuItemFont::create("OFF"); CCMenuItem* subItem3 = CCMenuItemFont::create("ON/OFF"); //菜单项中加入选项 CCMenuItemToggle* itemToggle = CCMenuItemToggle::create(subItem1); itemToggle->addSubItem(subItem2); itemToggle->addSubItem(subItem3); //加入菜单项 menu->addChild(itemToggle); //自己主动对齐菜单项 menu->alignItemsVertically(); //实现菜单出场效果 //第一个菜单从窗体左边进入。第二个从右边进入,以此类推 //创建一个数组保存菜单项 CCArray* arr = menu->getChildren(); CCObject* obj; float dt = 2.0f;//用于延迟显示菜单 //用于遍历菜单项 int index = 0; CCARRAY_FOREACH(arr, obj) { //强制类型转换呢(将菜单项的类型转换成同样的类型) CCMenuItem* item = (CCMenuItem*)obj; //创建延迟动作 CCDelayTime* delay = CCDelayTime::create(dt*index); //用于创建弹性特效 CCEaseElasticOut* out = NULL; if (index % 2 == 0) { //设置菜单项的位置(将菜单设置在窗体的最左边) item->setPositionX(item->getPositionX() - winSize.width); //移动菜单(设置菜单从左往右移动) //第一个參数:菜单移动的时间 //第二个參数:菜单移动后的位置 CCMoveBy* moveBy = CCMoveBy::create(10, ccp(winSize.width, 0)); //弹性效果 out = CCEaseElasticOut::create(moveBy); } else { //把移动到右边 item->setPositionX(item->getPositionX() + winSize.width); //移动菜单(设置菜单从右往左移动) //第一个參数:菜单移动的时间 //第二个參数:菜单移动后的位置 CCMoveBy* moveBy = CCMoveBy::create(10, ccp(-winSize.width, 0)); //弹性效果 out = CCEaseElasticOut::create(moveBy); } //使得菜单项依照一定的顺序运行 CCSequence* seq = CCSequence::create(delay, out, NULL); item->runAction(seq); index++;//遍历菜单项 } return true; }
运行结果: