当前位置: 首页 > news >正文

【Cocosd2d-x CCMenu菜单之二】

 

 

菜单项CCMenuItem是一个基类。 子类CCMenuItemFont、CCMenuItemLabel、CCMenuItemSprite、CCMenuItemToggle可增加CCMenu中形成菜单。

程序代码:

bool HelloWorld::init()
{

    if ( !CCLayer::init() )
    {
        return false;
    }
    
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
                                        menu_selector(HelloWorld::menuCloseCallback));
    
	pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
                                origin.y + pCloseItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition(CCPointZero);
    this->addChild(pMenu, 1);

	//add your code...
	//使用字体定义菜单项,包含 CCMenuItemAtlasFont, CCMenuItemFont 两种方式,CCMenuItemFont通过设置字体名称来设置字体。   
	CCMenuItemFont::setFontSize(30); //字号  
	CCMenuItemFont::setFontName("Courier New");//字体  
	CCMenuItemFont *item = CCMenuItemFont::create("--- Go Back ---", this, menu_selector(HelloWorld::menuItemFontcall));//參数1:文字内容。參数2:运行回调函数的目标类。參数3:按下触发的回调函数  
	//item->setPosition(ccp(visibleSize.width/2,100));  

	//通过字体配置PNG文件的 CCLabelAtlas  
	CCLabelAtlas *atlasfont =  CCLabelAtlas::create("0123456789", "labelatlas.png", 16, 24, '.');//參数顺序:文字内容,图片,单个文字宽,单个文字高,默认显示字符   
	CCMenuItemLabel *item1 = CCMenuItemLabel::create(atlasfont, this, menu_selector(HelloWorld::menuItemFontcall2));//參数顺序:文字渲染类,运行回调函数的目标类,按下触发的回调函数    
	//item1->setPosition(ccp(visibleSize.width/2,400));  

	//精灵菜单项  
	CCSprite *spriteNormal   = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*2,115,23));  
	CCSprite *spriteSelected = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*1,115,23));  
	CCSprite *spriteDisabled = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*0,115,23));  

	CCMenuItemSprite* item3 = CCMenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(HelloWorld::menuCallback3));//參数:3种菜单状态及回调函数  
	//item3->setPosition(ccp(visibleSize.width/2,300));  

	//通过字体配置FNT类型文件的CCLabelBMFont  
	CCLabelBMFont* label = CCLabelBMFont::create("Enable AtlasItem", "bitmapFontTest3.fnt");  
	CCMenuItemLabel* item4 = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::menuCallback4) );  
	//item4->setPosition(ccp(visibleSize.width/2+50,250));  

	//触发器菜单项,能够将不论什么菜单项传递进去  
	CCMenuItemToggle *toggle = CCMenuItemToggle::createWithTarget(  this,  
		menu_selector(HelloWorld::menuCallback5),   
		CCMenuItemFont::create("On"),  
		CCMenuItemFont::create("Off"),   
		NULL);  
	//toggle->setPosition(ccp(visibleSize.width/2+100, 150));  

	CCMenu *menu = CCMenu::create(item, item1, item3, item4, toggle, NULL); 
	menu->alignItemsVertically();
	

	CCSize s = CCDirector::sharedDirector()->getWinSize();

	int i=0;
	CCNode* child;
	CCArray * pArray = menu->getChildren(); //获取menu全部节点(菜单项)
	CCObject* pObject = NULL;
	CCARRAY_FOREACH(pArray, pObject)
	{
		if(pObject == NULL)
			break;

		child = (CCNode*)pObject;

		CCPoint dstPoint = child->getPosition();//获取每一个节点位置
		int offset = (int) (s.width/2 + 50);
		if( i % 2 == 0)
			offset = -offset;

		child->setPosition( ccp( dstPoint.x + offset, dstPoint.y) );//设置菜单项初始位置
		child->runAction( 
			CCEaseElasticOut::create(CCMoveBy::create(2, ccp(dstPoint.x - offset,0)), 0.35f) //从初始位置移动新的位置。有振幅效果
			);
		i++;
	}


	menu->setPosition(ccp(s.width/2, s.height/2));
	this->addChild(menu);

	return true; 

}

void HelloWorld::menuItemFontcall(CCObject* pSender)
{
	CCLOG("menuItemFontcall...");
}

void HelloWorld::menuItemFontcall2(CCObject* pSender)
{
	CCLOG("menuItemFontcall2...");
}
void HelloWorld::menuCallback3(CCObject* pSender)
{
	CCLOG("menuCallback3...");
}
void HelloWorld::menuCallback4(CCObject* pSender)
{
	CCLOG("menuCallback4...");
}
void HelloWorld::menuCallback5(CCObject* pSender)
{
	CCLOG("menuCallback5...");
}


 


相关文章:

  • ISO8583开发注意事项和心得体会
  • iOS 相册和网络图片的存取
  • beanshell获取响应结果数据
  • XYGame-网络同步3-防作弊
  • 红黑树 - C++代码实现
  • 自己定义iOS上双击Home键图切换
  • 数据预测的步骤
  • Elasticsearch学习笔记-04.2删除文档
  • 磁珠与电感的区别,看了就灰常明白了
  • Spring Quartz 集群动态创建任务
  • 考试题解集合
  • sublime Text3 插件
  • Http1.0和Http1.1的主要区别
  • DOM操作表格
  • BZOJ1486 最小圈 [分数规划+负权环]
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 11111111
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES2017异步函数现已正式可用
  • magento2项目上线注意事项
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Shell编程
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring框架之我见(三)——IOC、AOP
  • Vue官网教程学习过程中值得记录的一些事情
  • Webpack 4 学习01(基础配置)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 当SetTimeout遇到了字符串
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端路由实现-history
  • 微服务入门【系列视频课程】
  • 追踪解析 FutureTask 源码
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Python 之网络式编程
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (175)FPGA门控时钟技术
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (ZT)出版业改革:该死的死,该生的生
  • (二)学习JVM —— 垃圾回收机制
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (三十五)大数据实战——Superset可视化平台搭建
  • *Django中的Ajax 纯js的书写样式1
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 4.0中的泛型协变和反变
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 应用中使用dot trace进行性能诊断
  • .NET导入Excel数据
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @拔赤:Web前端开发十日谈
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择