zoukankan      html  css  js  c++  java
  • Cocos2d-X中的菜单

    在Cocos2d-X实现显示菜单的方式比較特殊,首先须要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu仅仅是一个容器,须要使用CCMenuItemFont才干实现创建菜单

    程序演示样例:创建一个简单的菜单

    程序代码:

    #include "Menu.h"
    
    CCScene* Menu::scene()
    {
        CCScene* scene = CCScene::create();
        
        Menu* layer = Menu::create();
    
        scene->addChild(layer);
    
        return scene;
    }
    
    
    bool Menu::init()
    {
        //初始化父类层
        CCLayer::init();
    
        //得到窗体的尺寸
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
        //创建一个Menu(看不到效果,Menu仅仅是一个容器)
        CCMenu* menu = CCMenu::create();
    
        //加入Menu
        addChild(menu);
    
        //创建一个MenuItem, 默认的Item位置就在中央
        CCMenuItemFont* item = CCMenuItemFont::create("This is item");
    
        //将MenuItem添加到Menu上
        menu->addChild(item1);
    
        return true;
    }
    
    


    运行结果:


    程序演示样例:创建多个菜单,而且实现菜单响应事件

    在Menu.h中加入以下的代码

    #ifndef __Menu_H__
    #define __Menu_H__
    
    #include "cocos2d.h"
    USING_NS_CC;
    
    class Menu : public CCLayer
    {
    public:
         bool init();  
    
        static CCScene* scene();
    
        void menuHandler(CCObject*);
    
        CREATE_FUNC(Menu);
    };
    
    #endif // __HELLOWORLD_SCENE_H__
    


    在Menu.cpp中加入以下的代码

    #include "Menu.h"
    
    CCScene* Menu::scene()
    {
        CCScene* scene = CCScene::create();
        
        Menu* layer = Menu::create();
    
        scene->addChild(layer);
    
        return scene;
    }
    
    
    bool Menu::init()
    {
        //初始化父类层
        CCLayer::init();
    
        //得到窗体的尺寸
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
        //创建一个Menu(看不到效果。Menu仅仅是一个容器)
        CCMenu* menu = CCMenu::create();
    
        //加入Menu
        addChild(menu);
    
        //创建一个MenuItem, 默认的Item位置就在中央
        CCMenuItemFont* item1 = CCMenuItemFont::create("This is item1");
    
        //将MenuItem添加到Menu上
        menu->addChild(item1);
    
         //创建一个MenuItem, 默认的Item位置就在中央
        CCMenuItemFont* item2 = CCMenuItemFont::create("This is item2");
    
        //加入MenuItem
         menu->addChild(item2);
    
         //设置item2的位置
         item2->setPositionY(item1->getPositionY() - 100);
    
        //设置响应函数:当触摸到item时调用Menu::menuHandler
        //第一个參数:响应函数所在的对象
        //第二个參数:成员函数指针
        item1->setTarget(this, menu_selector(Menu::menuHandler));
        item2->setTarget(this, menu_selector(Menu::menuHandler));
    
        //设置菜单项的ID
        //item1的ID为1
        //item2的ID为2
        item1->setTag(1);
        item2->setTag(2);
    
        return true;
    }
    
    //响应菜单事件
    void Menu::menuHandler(CCObject* obj)
    {
        //将obj强制转换成菜单项类型
        CCMenuItemFont* item = (CCMenuItemFont*)obj;
    
        //得到菜单项的ID
        int tag = item->getTag();
    
        //推断用户点击了那个菜单
        if(1 == tag)
        { 
            MessageBox(NULL, TEXT("item1 is clicked !"), TEXT("MenuItem响应"), MB_OK);
        }
        else
        {
            MessageBox(NULL, TEXT("item2 is clicked !"), TEXT("MenuItem响应"), MB_OK);
        }
    }
    


    运行结果:



    当单击“This is Item1”后:


    当单击“This is Item2”后:

    
  • 相关阅读:
    业务领域建模Domain Modeling
    用例建模Use Case Modeling
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    结合工程实践选题调研分析同类软件产品
    如何提高程序员的键盘使用效率?
    CSS水平布局
    CSS文档流
    CSS盒子模型
    CSS单位
    CSS选择器的权重
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6893632.html
Copyright © 2011-2022 走看看