zoukankan      html  css  js  c++  java
  • cocos2dx中的菜单项CCMenuItem及其五个子类的使用

    /*CCMenuItem是一个虚基类,因此必须实现它的五个子类之一,再把子类对象赋给父类指针,相当于多态*/
        CCMenuItem *fontItem = CCMenuItemFont::create("menuItemFont", this, menu_selector(T11CCMenu::menuCallBack));
        /*如果一行写不下,也可以分两行来写,使用settarget()*/
        CCMenuItem *fontItem = CCMenuItemFont::create("menuItemFont");
        fontItem->setTarget(fontItem, menu_selector(menuCallBack));
    
    /*将菜单项添加进菜单,如果在create函数中初始化,则必须要以NULL结尾*/
        CCMenu *menu = CCMenu::create(fontItem,NULL);
    
    /*第二个菜单项子类:CCMenuItemImage,最多有5个参数,可以设置选中前的图片,选中后图片,菜单项变灰的图片等*/
        CCMenuItem *imageItem = CCMenuItemImage::create("menuitem/CloseNormal.png", "menuitem/CloseSelected.png", "menuitem/CloseDead.png");
        imageItem->setTarget(this, menu_selector(T11CCMenu::menuCallBack));
        //imageItem->setEnabled(false);//第三个参数,菜单项变灰时显示的图片
    
    
        /*第三个菜单项子类:CCMenuItemLabel,顾名思义就是使用Label来创建的菜单项,前提是先要创建好标签*/
        CCLabelBMFont *bm = CCLabelBMFont::create("bm", "fonts/bitmapFontTest.fnt");//先创建好标签
        CCMenuItemLabel *labelItem = CCMenuItemLabel::create(bm, this, menu_selector(T11CCMenu::menuCallBack));
    
    
        /*第四个菜单项子类:CCMenuItemSprite,即是通过精灵来创建菜单项,前提也是要先创建好精灵*/
        CCSprite *normal = CCSprite::create("menuitem/gonormal.png");
        CCSprite *select = CCSprite::create("menuitem/goselected.png");
        CCMenuItemSprite *sprItem = CCMenuItemSprite::create(normal, select);
        sprItem->setTarget(this, menu_selector(T11CCMenu::menuCallBack));
    
        /*第五个菜单项子类:CCMenuItemToggle,可以添加任何其他子菜单项,只要是CCMenuItem及其子类即可*/
        CCMenuItem * t1 = CCMenuItemFont::create("ON");
        CCMenuItem * t2 = CCMenuItemFont::create("OFF");
        CCMenuItem * t3 = CCMenuItemFont::create("10%");
        CCMenuItem * t4 = CCMenuItemFont::create("50%");
        CCMenuItem * toggle = CCMenuItemToggle::createWithTarget(this,
            menu_selector(T11CCMenu::menuCallBack),
            t1, t2, t3, t4,sprItem, NULL);
    
    
        menu = CCMenu::create();
        menu->addChild(fontItem);
        menu->addChild(imageItem);
        menu->addChild(labelItem);
        //menu->addChild(sprItem);
        menu->addChild(toggle);
    
        menu->alignItemsVerticallyWithPadding(20);
        addChild(menu);

    1.CCMenu继承自CClayer,本质是一个图层,但是它与图层又有不同的地方,

    2.CCMenuItem菜单项是一个虚基类,要想使用它需要实现它的五个子类中的某一个

    3.菜单项的五个子类:

    CCMenuItemFont

    CCMenuItemImage

    CCMenuItemLabel

    CCMenuItemSprite

    CCMenuItemToggle

    4.菜单项相对于CCLabel的高级之处在于它有回调函数(menu_seletor),可以实现响应点触事件

    5.CCMenu坐标系的默认原点在屏幕中心,且它的大小和屏幕一样大,如果需要设置某个菜单项的特定位置,可以先设置CCMenu的坐标原点为GL坐标系的原点,即屏幕的左下角.menu->setPosition(CCPointZero);

    6.菜单项的创建:

    第一种创建方式:

    CCMenuItemFont *fontItem=CCMenuItemFont::create("this is a fontItem",menu_selector(T11CCMenu::menuCallBack));//一个参数是菜单项要显示的内容,第二个参数是菜单项点触事件的响应回调函数.这个回调函数是自己实现的.

    第二种创建方式:

    CCMenuItemFont *fontItem=CCMenuItemFont::create("this is a fontItem");

    fontItem->setTarget(this,T11CCMenu::menuCallBack);//第一个参数是要响应的对象,第二个参数是要响应的回调函数,这是为了防止一行写不下,而分开的.

    7.菜单的创建方式:

    第一种创建方式:

    CCMenu *menu=CCMenu::create(fontItem,labelItem,...NULL);//用以及存在的菜单项创建菜单,且是变参的,必须以NULL结尾

    第二种创建方式:

    CCMenu *menu=CCMenu::create();//创建一个空的菜单

    menu->addchild(fontItem);

    menu->addchild(labelItem);//然后添加菜单项,相对于子节点

    8.多个子菜单项的排列方式:

    a.垂直排列:menu->alignItemsVertically();

    menu->alignItemsVerticallyWithPadding(50);

    b.水平排列:menu->alignItemsHorizontally();

    带间隔的排列:menu->alignItemsHorizontallyWithPadding(30);//每两个菜单项之间间隔30

  • 相关阅读:
    Arrow-一个最好用的日期时间Python处理库
    悲观锁与乐观锁
    python中super的使用
    jquery的html,text,val
    spring与mybatis三种整合方法
    Android 在线SDK更新 和谐被墙解决
    转【】浅谈sql中的in与not in,exists与not exists的区别_
    tableview 里面的 必须配套使用的方法
    IOS发送Email的两种方法-备
    iOS基本的发短信和打电话调用
  • 原文地址:https://www.cnblogs.com/ttss/p/4082950.html
Copyright © 2011-2022 走看看