Cocos2d-X中实现菜单特效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocos2d-X中实现菜单特效相关的知识,希望对你有一定的参考价值。

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;
}

运行结果:
技术分享








以上是关于Cocos2d-X中实现菜单特效的主要内容,如果未能解决你的问题,请参考以下文章

在 Navigation Drawer 的每个片段中实现不同的 Action Bar 项

扩展片段的类中的选项卡

在片段中实现对话框时,必须在添加内容之前请求窗口功能

在片段中实现 onClickListener

在多个片段中的片段中实现选项卡

如何在此代码中实现下拉菜单?