1.cocos2dx它Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
CCMenu
基本结构
CCMenu继承自CCLayer,本质是一个容器。须要被addChild到父类中去。
CCMenuItem是菜单项,它有例如以下子类:
CCMenuItemFont;CCMenuItemImage;CCMenuItemLabel;CCMenuItemSprite;CCMenuItemToggle;
是真正的须要实例化的菜单项。须要addChild到CCMenu对象中去。
演示样例:
CCMenuItem * item = CCMenuItemFont::create(“Start”); //这里的this表示的是调用者 Item->setTarget(this,menu_selector(MYMenu::menuCallBack)); CCMenu * menu = CCMenu::create(); menu->addChild(item); addChild(menu); |
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); |
C CCMenuItemImage
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, this,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,this,menu_selector(MYMenu::menuCallBack)); menu->addChild(spriteItem); |
第一个參数和第二个參数为CCSprite后面的參数,同上。
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.能够实现变化的菜单。
怎样推断哪个菜单被点
打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; } |
案例说明:
MYMenu.h |
#ifndef #define #include USING_NS_CC; class public: CREATE_FUNC(MYMenu); bool static void enum { FONT1, }; CCMenu * }; #endif |
MYMenu.cpp |
#include #include CCScene * { CCScene * MYMenu * scene->addChild(layer); return } //五种菜单 #if 0 CCMenuItemFont; CCMenuItemImage; CCMenuItemLabel; CCMenuItemSprite; CCMenuItemToggle; #endif bool { CCLayer::init(); //第1步:创建一个菜单 menu = //第2步:创建菜单项 //能够将以下的两行合并 CCMenuItem * fontItem->setTarget(this, //显示menuItem在界面中的显示条项 CCLog("first CCLog("first CCLog("first fontItem->getContentSize().width,fontItem->getContentSize().height); //创建第二个Menu条项 CCMenuItem * fontItem2->setTarget(this, //设置Menu在界面中的显示状态 //menu->alignItemsVerticallyWithPadding(40); //显示menu在界面中的显示特征 CCLog("---------------------------------------------"); CCLog("Menu:x CCLog("Menu CCLog("Menu menu->getContentSize().width, menu->getContentSize().height); //第2步:创建CCMenuItemImage类型的菜单项 CCMenuItem *imageItem imageItem->setTarget(this, //第2步:创建CCLabelBMFont类型的菜单项 CCLabelBMFont * CCMenuItem *labelItem labelItem->setTarget(this,menu_selector(MYMenu::menuCallBack)); //第2步:创建CCSprite类型的菜单项 CCSprite *nor CCSprite *sel CCMenuItem * sprItem->setTarget(this, //第2步:创建CCMenuItemToggle类型的菜单项 CCMenuItem * CCMenuItem * CCMenuItem * CCMenuItem * CCMenuItem * menu_selector(MYMenu::menuCallBack), t1,t2,t3,t4,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 = CCObject * int CCARRAY_FOREACH(array, { CCMenuItem *item item->setTag(i i++; } /* for (int i = 0; i < array->count();++i) { CCMenuItem *item = (CCMenuItem *)array->objectAtIndex(i); item->setTag(i); } */ return } //回调函数 void { CCMenuItem * switch (item->getTag() { case CCLog("font break; case break; case break; case break; case int CCLog("index break; } } |
执行结果: |
版权声明:本文博客原创文章,博客,未经同意,不得转载。
1.cocos2dx它Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)的更多相关文章
- 3.cocos2dx它Menu,由menu为了实现场景切换
1 头文件 TMenu.h #ifndef __TMENU_H__ #define __TMENU_H__ #include "cocos2d.h" USING_NS_CC; ...
- Cocos2d-X中Menu的综合运用
今天将曾经写的代码和项目集成到了一个菜单中,能够通过菜单切换到曾经做的项目 程序的project文件夹 主要代码分析: LessonMenu.h中实现创建菜单,遍历菜单通过菜单切换到各个项目 #ifn ...
- Cocos2d-x之Menu
| 版权声明:本文为博主原创文章,未经博主允许不得转载. cocos2d-x菜单简介: 菜单也是游戏开发中的重要环节,一般游戏开始的第一个画面都是游戏主菜单,这些菜单包括,开始游戏,游戏设置,关卡 ...
- cocos2dx中的菜单项CCMenuItem及其五个子类的使用
/*CCMenuItem是一个虚基类,因此必须实现它的五个子类之一,再把子类对象赋给父类指针,相当于多态*/ CCMenuItem *fontItem = CCMenuItemFont::create ...
- Learning Cocos2d-x for WP8(5)——详解Menu菜单
原文:Learning Cocos2d-x for WP8(5)--详解Menu菜单 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(5)——详解Menu菜单 菜单是游戏必不 ...
- cocos2d-x Menu、MenuItem
转自:http://codingnow.cn/cocos2d-x/832.html 学习cocos2d-x中的菜单主要需要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuIt ...
- cocos2d-x 菜单
菜单在游戏中是非常常见的控件之一.下面来分析下在cocos2dx中有那些菜单. 一共有六种菜单. CCMenu在创建时需要使用CCMenuItem来创建. CCMenu继承自CCLayer,是一个菜单 ...
- 【Cocos2d-X开发学习笔记】第09期:渲染框架之菜单类(CCMenu)的使用
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.菜单项(CCMenuItem) 菜单项 ...
- Cocos2d中的Menu使用
学习cocos2d-x中的菜单主要须要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuItem的详细子类. a. 以下来学习一下相关的类. 1. CCMenu 菜单,是CCL ...
随机推荐
- 开放Nginx在文件夹列表功能
nginx在列出的默认同意整个文件夹.你怎么转Nginx在文件夹列表功能?打开nginx.conf文件.在location server 要么 http段增加 autoindex on;另外两个參数最 ...
- hdu 4912 Paths on the tree(lca+馋)
意甲冠军:它使树m路径,当被问及选择尽可能多的路径,而这些路径不相交. 思考:贪心,比較忧伤.首先求一下每对路径的lca.依照lca的层数排序.在深一层的优先级高.那么就能够贪心了,每次选择层数最深的 ...
- swift 它们的定义TabBarItem
1.效果图 2.NewsViewController.swift // // NewsViewController.swift // NavigationDemo // // Created ...
- 关于.NET,.NET Framework 和ASP.NET的总结
.NET 1.1. .NET是 Microsoft XML Web services 平台和技术. 1.2. 一个.NET应用是一个运行于.NET Framework之上的 ...
- java安全性语言
java通过所谓的沙箱安全模型保证了其安全性,以下我们就来看看java提供的安全沙箱机制. 组成沙箱的基本组件例如以下: 1.类装载器结构: 2.class文件检验器: 3.内置于java虚拟机(及语 ...
- velocity基本语法
一.基本语法 1."#"用于识别Velocity该脚本语句,这包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macr ...
- java 产生的固体物的基础上 增删改的SQL声明
经过多次修改.最后版本. package com.power.sql; import java.lang.reflect.Field; import java.lang.reflect.Modifie ...
- Arduino 数码管LED驱动器 阵列方法
样品谈到最后一个驱动程序LED数码管,采用了最简单的解决方案之一,对于每一个LED高低电平控制,这样的好处是每个LED控制可检.避免短路造成的错觉,因为,但是对于数字的变化是,它是多余的写,因此,这种 ...
- ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案
原文:ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案 针对 SSIS intergation 项目 > 属性 > Debug >Run64bITRunt ...
- Bob大叔观OO原则
Bob大叔观OO原则 上篇总结了经典的23种 设计模式,详细的解读后期会陆续的详细揭开.使用设计模式的根本原因就是为了增强代码的复用性和可维护性.而面向对象是实现代码复用的有效途径,所以这里有必要了解 ...