zoukankan      html  css  js  c++  java
  • 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;
    }
    

    运行结果:

    
  • 相关阅读:
    C语言博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客
    迭代购物车Dao&&GUI
    Java购物车大作业01
    DS-查找
    DS-图
    DS--树
    DS博客作业02--栈和队列
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5227056.html
Copyright © 2011-2022 走看看