cocos2d-x基本类(三)
来源:互联网 发布:北方交通大学网络教育 编辑:程序博客网 时间:2024/05/01 21:08
CCMenuA CCMenu extends CCLayerCCMenuItemCCMenuItem base class, extends CCNodeCCMenuItemAtlasFontA CCMenuItemAtlasFont Helper class that creates a MenuItemLabel class with a LabelAtlasCCMenuItemFontA CCMenuItemFont Helper class that creates a CCMenuItemLabel class with a LabelCCMenuItemImageCCMenuItemImage accepts images as itemsCCMenuItemLabelAn abstract class for "label" CCMenuItemLabel items Any CCNode that supports the CCLabelProtocol protocol can be addedCCMenuItemSpriteCCMenuItemSprite accepts CCNode<CCRGBAProtocol> objects as itemsCCMenuItemToggleA CCMenuItemToggle A simple container class that "toggles" it's inner items The inner itmes can be any MenuItem
在 cocos2d 中判断互相重叠的 CCMenuItem:
CCMenu继承图:
CCMenuItem继承图:
菜单:CCMenu 和 CCMenuItem及其子类
使用列子:
- CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
- "CloseNormal.png",
- "CloseSelected.png",
- this,
- menu_selector(HelloWorld::menuCloseCallback) );
- pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
- // create menu, it's an autorelease object
- CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL);
- pMenu->setPosition( CCPointZero );
- this->addChild(pMenu, 1);
在 cocos2d 中判断互相重叠的 CCMenuItem:
转:http://www.cocoachina.com/cms/plus/view.php?aid=2451
cocos2d 提供的 CCMenu、CCMenuItem、CCMenuItemImage、CCMenuItemSprite 等类是构造菜单和按钮的常用工具类。不过 cocos2d 的 CCMenu 在判断互相重叠的 CCMenuItem 时存在一点小问题。
假设有三个按钮,如下图所示:
当玩家点击时,如果点击位置在 PLAY 按钮和另外两个按钮重叠的地方,那么总是 PLAY 按钮生效。出现这种情况的原因是 CCMenu 按照 CCMenuItem 添加的顺序来依次判断,PLAY 是第一个添加到 CCMenu 中的 CCMenuItem 对象,所以会忽略掉重叠区域的其他按钮。
要解决这个问题,需要从 CCMenu 派生一个继承类 CCMenuEx:
CCMenuEx.h
- #import "cocos2d.h"
- @interface CCMenuEx : CCMenu
- {
- }
- @end
CCMenuEx.m
- #import "CCMenuEx.h"
- @implementation CCMenuEx
- -(CCMenuItem *) itemForTouch: (UITouch *) touch
- {
- CGPoint touchLocation = [touch locationInView: [touch view]];
- touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
- CCMenuItem* item = nil;
- CCMenuItem* hitItem = nil;
- CCARRAY_FOREACH(children_, item){
- if ( [item visible] && [item isEnabled] ) {
- if (CGRectContainsPoint([item rect], touchLocation)) {
- if (hitItem) {
- if ([hitItem zOrder] < item.zOrder) {
- hitItem = item;
- }
- } else {
- hitItem = item;
- }
- }
- }
- }
- return hitItem;
- }
- @end
最后在应用程序中将构造 CCMenu 对象的代码改为使用 CCMenuEx 即可。
CCMenuEx 不但判断点击位置是否在按钮上,还会判断按钮的叠放次序。在多个按钮重叠区域点击时,最上面的按钮会被触发。
- cocos2d-x基本类(三)
- cocos2d-x基本类(一)
- cocos2d-x基本类(二)
- cocos2d-x基本类(四)
- cocos2d-x基本类(五)
- cocos2d-x 笔记(三) sprite类
- 【Cocos2d-x】基本的几个类
- cocos2d-x基本元素
- Cocos2d-x基本动作
- Cocos2D-X学习笔记(三)
- cocos2d-x 初学三问(上)
- cocos2d-x 初学三问(下)
- cocos2d-x+cocosbuilder 学习笔记 (三)
- cocos2d-x 格斗游戏教程(三)
- Cocos2d-x入门教程(三)CCSprite对象
- cocos2d-x基础(三)CCSpriteFrameCache,CCSpriteFrame
- cocos2d-x 3.5 入门(三)
- cocos2D-x 学习之路(三)
- WinMain传进来的lpCmdLine和GetCommandLineW得到的有啥区别
- 近期项目中遇到的问题和相应的解决方法
- 百度google收录的差异
- 经验
- Android系统架构图及简单的系统架构介绍
- cocos2d-x基本类(三)
- 如何增加搜索收录数
- html css 样式整合
- Java开发环境的搭建
- windows与应用程序 消息 传递图
- C语言中声明的优先级规则
- 碉堡了曹郁
- spring 集成flex(1)
- μCOS串口通讯模块设计