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;
}
运行结果: