菜单制作,事件处理
来源:互联网 发布:lol美服mac版下载 编辑:程序博客网 时间:2024/04/29 16:25
一、菜单显示
先说CCMenuitem:通常使用这三个类来创建
CCMenuItemImage:图片按钮菜单项,通过指定图片资源来创建菜单项。
CCMenuItemLabel:文本菜按钮单项,通过指定文本标签( 实现CCLabelProtocol接口的类,如CCLabelTTF)来创建菜单项。
CCMenuItemToggle :开关按钮菜单项,这种类型的按钮一次只有一个菜单项显示出来,当你单击它的时候,它就会切换到另外一个菜单项。
1.CCMenuItemImage:可选择三种状态:未选中, 选中, 不可用
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(s_pPathClose, s_pPathClose, this, menu_selector(TestController::closeCallback) );
CCMenu* pMenu =CCMenu::create(pCloseItem, NULL);
TestController::closeCallback是点击菜单后调用的函数。
2、CCMenuItemLabel:
for (int i = 0; i < TESTS_COUNT; ++i)
{
CCLabelTTF* label = CCLabelTTF::create(g_aTestNames[i].c_str(), "Arial", 24); //这里是赋值菜单文本
CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(TestController::menuCallback));
m_pItemMenu->addChild(pMenuItem, i + 10000); //m_pItemMenu就是菜单
pMenuItem->setPosition( ccp( VisibleRect::center().x, (VisibleRect::top().y - (i + 1) * LINE_SPACE) ));
}
//设置一下整个菜单的大小
m_pItemMenu->setContentSize(CCSizeMake(VisibleRect::getVisibleRect().size.width, (TESTS_COUNT + 1) * (LINE_SPACE)));
当然也可以用辅助类CCMenuItemFont来实现,该菜单点击时可产生字体放大
CCMenuItemFont::setFontName("Arial");CCMenuItemFont::setFontSize(22);CCMenuItemFont* pFontMenuItem = CCMenuItemFont::create("font item", this, menu_selector(TestController::menuCallback));
所有支持CCLabelProtocol的节点都可以用来创建CCMenuItemLabel。
CCLabelTTF:同时也是CCSprite的子类,用来渲染文字标签的,可以指定字体,每次设置字符串内容时都需要重新创建纹理和渲染,性能不好,可以用CCLabelBMFont或者CCLabelAtlas代替它。
CCLabelBMFont:也是CCSpriteBatchNode的子类,创建CCLabelBMFont对象需要一个字符串和一个fnt格式的文件(字库),如:
CCLabelBMFont * labelMenu = CCLabelBMFont::create("BitmapFont Atlas", "fonts/bitmapFontTest.fnt");CCMenuItemLabel* pItemBMFon = CCMenuItemLabel::create(labelMenu, this, menu_selector(TestController::menuCallback);pItemBMFon->setPosition(ccp(0, 40));m_MenuView->addChild(pItemBMFon, 10000+10);
CCLabelAtlas:也是CCAtlasNode的子类,创建一个CCLabelAtlas对象的代码如下:
static
CCLabelAtlas * labelWithString(
const
char
*label,
const
char
*charMapFile, unsigned
int
itemWidth, unsigned
int
itemHeight, unsigned
char
startCharMap);
//示例
CCLabelAtlas* label1 = CCLabelAtlas::labelWithString(
"123 Test"
,
"fonts/tuffy_bold_italic-charmap.png"
, 48, 64,
' '
);
参数的含义:要绘制的字符,图片文件,图片文件中每个字符的宽度,图片文件中每个字符的高度,图片的起始字符。
3、CCMenuItemToggle:
CCMenuItemImage* toggleNormal = CCMenuItemImage::create(s_pPathClose, s_pPathClose); // 未点击时的图片
CCMenuItemImage* toggleSelect = CCMenuItemImage::create(s_pPathClose, s_pPathClose); // 点击后的图片
CCMenuItemToggle* pCloseItem = CCMenuItemToggle::createWithTarget(this, menu_selector(TestController::closeCallback),
toggleNormal, toggleSelect, NULL);// 使用以上两个图片菜单创建一个开关菜单
setSelectedIndex(1); //ccmenuitem可用来设置状态, 数字代表状态
例子:
void MenuLayer::onEnter(){ CCLayer::onEnter(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); /**---CCMenuItemLabel:由指定的字符串标签创建菜单--**/ //CCMenuItemFont:内部使用CCLabelTTF CCMenuItemFont::setFontName("Arial"); CCMenuItemFont::setFontSize(22); CCMenuItemFont* pFontMenuItem = CCMenuItemFont::itemFromString("font item", this, menu_selector(MenuLayer::menuCallback)); CCMenu* pFontMenu = CCMenu::menuWithItems(pFontMenuItem,NULL); pFontMenu->setPosition( ccp(winSize.width/2,winSize.height - 30) ); this->addChild(pFontMenu); //CCMenuItemAtlasFont:内部使用CCLabelAtlas CCMenuItemAtlasFont* pAtlasFontMenuItem = CCMenuItemAtlasFont::itemFromString("123456789", s_imgPathNum, 15, 19, '0', this, menu_selector(MenuLayer::menuCallback)); CCMenu* pAtlasFontMenu = CCMenu::menuWithItems(pAtlasFontMenuItem,NULL); pAtlasFontMenu->setPosition( ccp(winSize.width/2,winSize.height - 60) ); this->addChild(pAtlasFontMenu); //CCLabelBMFont CCLabelBMFont* pBMFontLabel = CCLabelBMFont::labelWithString("configuration", s_imgPathBMFont); CCMenuItemLabel* pItemBMFontLabel = CCMenuItemLabel::itemWithLabel(pBMFontLabel, this, menu_selector(MenuLayer::menuCallback)); CCMenu* pBMFontMenu = CCMenu::menuWithItems(pItemBMFontLabel,NULL); pBMFontMenu->setPosition( ccp(winSize.width/2,winSize.height - 90) ); this->addChild(pBMFontMenu); /**--CCMenuItemSprite:由指定的精灵类创建菜单--**/ CCSprite* spriteNormal = CCSprite::spriteWithFile(s_imgPathMenuItem, CCRectMake(0,23*2,115,23)); CCSprite* spriteSelected = CCSprite::spriteWithFile(s_imgPathMenuItem, CCRectMake(0,23*1,115,23)); CCSprite* spriteDisabled = CCSprite::spriteWithFile(s_imgPathMenuItem, CCRectMake(0,23*0,115,23)); CCMenuItemSprite* pMenuItemSprite = CCMenuItemSprite::itemFromNormalSprite(spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(MenuLayer::menuCallback)); CCMenu* pSpriteMenu = CCMenu::menuWithItems(pMenuItemSprite,NULL); pSpriteMenu->setPosition( ccp(winSize.width/2,winSize.height - 120) ); this->addChild(pSpriteMenu); //CCMenuItemImage:由指定的图片文件名创建菜单 CCMenuItemImage* pMenuItemImage = CCMenuItemImage::itemFromNormalImage(s_imgPathCloseNormal, s_imgPathCloseSelected, this, menu_selector(MenuLayer::menuCallback) ); CCMenu* pImageMenu = CCMenu::menuWithItem(pMenuItemImage); pImageMenu->setPosition( ccp(winSize.width/2,winSize.height - 150) ); this->addChild(pImageMenu); //CCMenuItemToggle:开关菜单,切换效果 //这里只使用了CCMenuItemFont,还可以使用其他的CCMenuItem CCMenuItemToggle* pMenuItemToggle = CCMenuItemToggle::itemWithTarget(this, menu_selector(MenuLayer::menuCallback), CCMenuItemFont::itemFromString( "On" ), CCMenuItemFont::itemFromString( "Off"), NULL ); CCMenu* pToggleMenu = CCMenu::menuWithItems(pMenuItemToggle,NULL); pToggleMenu->setPosition( ccp(winSize.width/2,winSize.height - 180) ); this->addChild(pToggleMenu);}运行效果如下:
</pre><h1>二、点击处理</h1><div><span style="white-space:pre"></span>实例:</div><div><span style="white-space:pre"></span>1、生成菜单:</div><div><span style="white-space:pre"><span style="white-space:pre"></span></span><pre name="code" class="cpp">for(BYTE i = 0; i < 4; i++){CCLabelBMFont * labelMenu = CCLabelBMFont::create(m_MenuName[i].c_str(), "fonts/bitmapFontTest.fnt");CC_BREAK_IF(! labelMenu);CCMenuItemLabel* pItemBMFon = CCMenuItemLabel::create(labelMenu, this, menu_selector(TestController::menuCallback));CC_BREAK_IF(! pItemBMFon);pItemBMFon->setPosition(ccp(0, 100 - i*40));m_MenuView->addChild(pItemBMFon, 10000+i);}
void TestController::menuCallback(CCObject *object){CCMenuItem *menuitem = (CCMenuItem*)object;int nIdx = menuitem->getZOrder() - 10000;
<span style="white-space:pre"></span>switch (nIdx)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>case 0:<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>case 1:<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>case 2:<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>case 3:<span style="white-space:pre"></span>CCDirector::sharedDirector()->end();<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>}
}
- 菜单制作,事件处理
- android 菜单事件处理
- [疯狂Java]AWT:菜单栏、菜单、菜单项、菜单事件处理
- 为菜单添加处理事件VC++
- Menu菜单的创建和事件处理
- selenium针对下拉菜单事件的处理
- 菜单的新建与点击事件的处理
- Cocos2d-X中实现自定义菜单处理事件
- 菜单事件
- 30-JavaScript-事件-同一事件多个处理程序-window的事件-关闭右键菜单
- 菜单-二级菜单的制作
- 位图菜单的制作
- 菜单的制作(WINFORMS)
- 制作弹出式菜单
- 右键菜单的制作!
- css制作三级菜单
- powerpoint制作下拉菜单
- css制作下拉菜单
- [Bluetooth(SDK)]使用WinSock搜索蓝牙设备
- struts2.3与struts2.2的不同之处
- [Delphi] Unit 'SimpleTimer' implicitly imported into package 'dclusr'解决办法
- iOS----四方块 动画按钮实现
- HttpWatch工具简介及使用技巧
- 菜单制作,事件处理
- android 中常用的布局方式
- iOS中视频播放 自适应横竖屏显示
- 关于内网IP和外网IP
- 【HDU】3452 Bonsai 最小割模板题
- poj 3750 小孩报数
- poj 1664 放苹果(递推)
- Android 之 下拉框(Spinner)的使用
- hdu-oj 2037 今年暑假不AC