加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

1.cocos2dx之Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLa

发布时间:2020-12-14 19:12:43 所属栏目:百科 来源:网络整理
导读:?? CCMenu 基本结构 CCMenu 继承自 CCLayer, 本质是一个容器。需要被 addChild 到父类中去。 CCMenuItem 是菜单项,它有如下子类: CCMenuItemFont;CCMenuItemImage;CCMenuItemLabel;CCMenuItemSprite;CCMenuItemToggle; 是真正的需要实例化的菜单项。需要 a
??

CCMenu

  1. 基本结构

    CCMenu继承自CCLayer,本质是一个容器。需要被addChild到父类中去。

    CCMenuItem是菜单项,它有如下子类:

CCMenuItemFont;CCMenuItemImage;CCMenuItemLabel;CCMenuItemSprite;CCMenuItemToggle;

是真正的需要实例化的菜单项。需要addChildCCMenu对象中去。

示例:

CCMenuItem * item = CCMenuItemFont::create(“Start”);

//这里的this表示的是调用者

Item->setTarget(this,menu_selector(MYMenu::menuCallBack));

CCMenu * menu = CCMenu::create();

menu->addChild(item);

addChild(menu);

  1. CCMenuItem

A CCMenuItemFont

CCMenuItem * font = CCMenuItemFont::create(“Start”,this,menu_selector(MYMenu::menuCallBack));

CCMenu * menu = CCMenu::create();

menu->addChild(item);

addChild(menu);

第一个参数为标签要显示的文字,第二个参数表示回调函数的调用者,第三个参数表示回调函数。

关于回调

typedef void (CCObject::*SEL_MenuHandler)(CCObject *);

#define menu_selector(_SELECTOR)(SEL_MenuHandler)(&_SELECTOR)

B CCMenu的坐标系统研究

fontItem->setPosition(ccp(winSize.width – 50,30));

menu->setPosition(CCPointZero);

CCLog("fontItem = %g %g",fontItem->getPositionX(),fontItem->getPositionY());

CCLog("menu = %g,%g,width %g,height = %g",menu->getPositionX(),menu->getPositionY(),

menu->getContentSize().width,menu->getContentSize().height);

CCCMenuItemImage

CCMenuItem *imageItem = CCMenuItemImage::create(“CloseNormal.png”,”CloseSelected.png”);

imageItem->setTarget(this,menu_selector(Menu::menuCallBack));

1个参数为末点击是显示的图片,第二个参数为点击后显示的图片,最后参数可以放到setTarget中,意义同上。

D CCMenuItemLabel

CCLabelBMFont *bm = CCLabelBMFont::create("bmFontLabelMenu",

"fonts/bitmapFontTest.fnt");

CCMenuItem * labelItem = CCMenuItemLabel::create(bm,menu_selector(MYMenu::menuCallBack));

menu->addChild(labelItem);

第一个参数为一个label,最后两个参数同上。

E CCMenuItemSprite

CCSprite * normal = CCSprite::create(“gonormal.png”);

CCSprite * selected = CCSprite::create(“goselected.png”);

CCMenuItemSprite * spriteItem = CCMenuItemSprite::create(normal,selected,menu_selector(MYMenu::menuCallBack));

menu->addChild(spriteItem);

第一个参数和第二个参数为CCSprite后面的参数,同上。

  1. CCMenuItemToggle

CCMenuItem *t1 = CCMenuItemFont::create("ON");

CCMenuItem *t2 = CCMenuItemFont::create("OFF");

CCMenuItem *t3 = CCMenuItemFont::create("10%");

CCMenuItem *t4 = CCMenuItemFont::create("50%");

CCMenuItemToggle * toggle =

CCMenuItemToggle::createWithTarget(this,

menu_selector(T11Menu::menuCallBack),t1,t2,t3,t4,NULL);

menu->addChild(toggle);

第一个和第二个参数为回调函数调用者和回调函数,后面的参数为CCMenuItem.可以实现变化的菜单。

  1. 如何判断哪个菜单被点

Tag

CCArray * array = menu->getChildren();

CCObject * obj;

int i = 0;

CCARRAY_FOREACH(array,obj)

{

CCMenuItem * item = (CCMenuItem *)obj;

item->setTag(i + 1000);

i++;

}

Tag

CCMenuItem * item = (CCMenuItem *)obj;

Switch (item->getTag() - 1000) {

Case FONT1:

CCLog(“CCMenuItemFont”);

break;

case FONT2:

break;

case IMAGE:

break;

case BM:

break;

case SPRITE:

break;

case TOGGLE:

{

int index = ((CCMenuItemToggle *)item)->getSelectedIndex();

CCLog(“index = %d”,index);

}

break;

}

  1. 案例说明:

MYMenu.h

#ifndef __MYMENU_H__

#define __MYMENU_H__

#include "cocos2d.h"

USING_NS_CC;

class MYMenu : public CCLayer {

public:

CREATE_FUNC(MYMenu);

bool init();

static CCScene * scene();

void menuCallBack(CCObject * obj);

enum MENU

{

FONT1,FONT2,138); font-family:新宋体; font-size:9.5pt">IMAGE,138); font-family:新宋体; font-size:9.5pt">LABELLABEL,138); font-family:新宋体; font-size:9.5pt">SPRITE,138); font-family:新宋体; font-size:9.5pt">TOGGLE

};

CCMenu * menu;

};

#endif

MYMenu.cpp

#include "MYMenu.h"

#include "AppMacros.h"

CCScene * MYMenu::scene()

{

scene = CCScene::create();

MYMenu * layer = create();

scene->addChild(layer);

return scene;

}

//五种菜单

#if 0

CCMenuItemFont;

CCMenuItemImage;

CCMenuItemLabel;

CCMenuItemSprite;

CCMenuItemToggle;

#endif

bool init()

{

CCLayer::init();

//1步:创建一个菜单

menu = CCMenu::create();

//2步:创建菜单项

//可以将下面的两行合并

CCMenuItem * fontItem = CCMenuItemFont::create("fontmenu");

fontItem->setTarget(this,138); font-family:新宋体; font-size:9.5pt">menu_selector(menuCallBack));

//显示menuItem在界面中的显示条项

CCLog("first Item :x = %g y = %g",fontItem->getPositionX(),0); font-family:新宋体; font-size:9.5pt">getPositionY());

"first Item Anchor x = %g,y = %g",0); font-family:新宋体; font-size:9.5pt">getAnchorPoint().x,0); font-family:新宋体; font-size:9.5pt">getAnchorPoint().y);

"first Item ContentSize width %g hight %g",

fontItem->getContentSize().width,0); font-family:新宋体; font-size:9.5pt">getContentSize().height);

//创建第二个Menu条项

CCMenuItem * fontItem2 = "fontmenu2");

fontItem2->menuCallBack));

//设置Menu在界面中的显示状态

//menu->alignItemsVerticallyWithPadding(40);

//显示menu在界面中的显示特征

"---------------------------------------------");

"Menu:x = %g,menu->"Menu Anchor x = %g y = %g",21); font-family:新宋体; font-size:9.5pt">"Menu ContentSize width %g high %g",

menu->getContentSize().height);

//2步:创建CCMenuItemImage类型的菜单项

CCMenuItem *imageItem = CCMenuItemImage::"CloseNormal.png","CloseSelected.png");

imageItem->menuCallBack));

//2步:创建CCLabelBMFont类型的菜单项

CCLabelBMFont * bm = CCLabelBMFont::"bmMenu",21); font-family:新宋体; font-size:9.5pt">"fonts/bitmapFontTest.fnt");

CCMenuItem *labelItem = CCMenuItemLabel::create(bm);

labelItem->menuCallBack));

//2步:创建CCSprite类型的菜单项

CCSprite *nor = CCSprite::"btn_go_1.png");

CCSprite *sel = "btn_go_0.png");

CCMenuItem * sprItem = CCMenuItemSprite::create(nor,sel);

sprItem->menuCallBack));

//2步:创建CCMenuItemToggle类型的菜单项

CCMenuItem * t1 = "ON");

CCMenuItem * t2 = "OFF");

CCMenuItem * t3 = "10%");

CCMenuItem * t4 = "%50%");

CCMenuItem * toggle = CCMenuItemToggle::createWithTarget(this,

menuCallBack),

t1,t2,t3,t4,138); font-family:新宋体; font-size:9.5pt">NULL);

//3步:将菜单项添加到菜单中去

menu->addChild(fontItem);

menu->addChild(fontItem2);

menu->addChild(imageItem);

menu->addChild(labelItem);

menu->addChild(sprItem);

menu->addChild(toggle);

this->addChild(menu);

//4步:设置菜单项的显示方式,让菜单项垂直显示

menu->alignItemsVertically();

//CCMenu类有一个getChildren()方法可以得到菜单项

CCArray * array = menu->getChildren();

CCObject * obj;

int i = 0;

CCARRAY_FOREACH(array,obj)

{

CCMenuItem *item = (CCMenuItem *)obj;

item->setTag(i + 100);

i++;

}

/*

for (int i = 0; i < array->count();++i)

{

CCMenuItem *item = (CCMenuItem *)array->objectAtIndex(i);

item->setTag(i);

}

*/

return true;

}

//回调函数

void CCObject * obj)

{

CCMenuItem * item = (CCMenuItem *)obj;

switch (item->getTag() - 1000)

{

case FONT1:

"font menu call ");

break;

case FONT2:

break;

case IMAGE:

break;

case LABELLABEL:

break;

case TOGGLE:

int idx = ((CCMenuItemToggle *)item)->getSelectedIndex();

"index = %d",idx);

break;

}

}

运行结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读