屏蔽方法:
进入新的CCLayer时:
[[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];
离开此CCLayer时调用
[[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
重写方法
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
解释:
由于CCMenu 按钮接受按键的优先级为-128(值越小优先级越高),所有不论处在那一层都会接收到点击
[[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];
priority: 优先级 kCCMenuHandlerPriority(-128)
swallowsToucher: 是否吃掉按钮不叫其他层再接收了 如果为NO其他层还是一样会接收到Touch数据
注意离开此CCLayer时一定要调用
[[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
否则下面层将不再接收按键
如果想在Layer A上添加一层Layer B, 想在B上点击不影响A 需要先把B层的触摸优先级调高一些
[[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:kCCMenuHandlerPriority-1 swallowsTouches:YES];
然后重写下面的函数- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
返回YES; 是扔掉触摸点,程序不在处理
返回NO是不扔掉触摸点,继续处理,但是底层A还是会接收到触摸点,还要继续处理
那么我们就把B需要的处理的按钮范围返回NO,不需要处理的返回YES就可以了 例如:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
// 排除提示层的按钮
NSInteger nChildCount = self.children.count;
for (int i=0; i<nChildCount; ++i) {
id object = [self.children objectAtIndex:i];
// 判断是否是按钮菜单
if ([object isKindOfClass:[CCMenu class]]) {
CCMenu *menu = (CCMenu*)object;
for (int j=0; j<menu.children.count; ++j) {
CCMenuItemImage *item = [menu.children objectAtIndex:j];
CGPoint local = [item convertToNodeSpace:touchLocation];
CGRect r = [item rect];
r.origin = CGPointZero;
if( CGRectContainsPoint( r, local ) ){
if(item.isEnabled == NO)
return YES;
return NO;
}
} //end of for
} // end of if
} // end of for
return YES;
}
如果 需要添加自定义区域的话,可以自己在里面添加判断
删除离开Layer B的时候一定要添加
[[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
否侧 程序会出问题
相关推荐
- `CCMenu`类继承自`CCLayer`,默认使用目标触摸委托,因此通常不会出现触摸事件的混乱问题。 #### 六、实践建议 - 在设计游戏或应用时,应根据具体需求选择合适的触摸事件分发机制。 - 对于需要精确控制触摸事件...
这里,`CCMenuItemFont::create`用于创建文本按钮,`this`表示当前类(通常是继承自`CCLayer`的类)作为接收事件的对象,`menu_selector`是Cocos2D-x提供的宏,用于将成员函数转换为可选动作。`startGame`和`...
4. iOS事件处理:理解如何在Cocos2D中处理触摸事件,如`ccTouchBegan`、`ccTouchMoved`和`ccTouchEnded`。 5. 自定义动画:如何通过编写自定义的`CCAction`子类来创建独特的动画效果。 通过实践这个项目,你可以...
CC菜单CCMenu将连续集成服务器上项目的构建状态显示为Mac菜单栏中的项目。 它作为CruiseControl项目的一部分开始,该项目构建了第一个连续集成服务器。 有关文档和支持,请访问 。 要下载并安装CCMenu,请访问 。 ...
`CCMenuItem`和`CCMenu`类提供了创建菜单和按钮的功能,通过监听按钮事件,可以响应用户的操作,如开始新游戏、暂停游戏等。 四、得分与游戏进度 游戏的得分系统和进度保存通常涉及到数据持久化。cocos2dx提供了...
另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,考虑到原场景中可能会有CCMenu,我将该 Layer 的 优先级设为了 与 CCMenu 相同,因为后添加的原因,所以总能屏蔽Menu 的事件, 而且在 Layer 上再...
总之,Cocos2d-x中实现弹出对话框的关键在于创建一个新的层(`CCLayer`子类),并在其中添加背景、按钮等元素,同时处理触摸事件以实现交互。通过这样的方式,我们可以灵活地在游戏或应用中插入各种对话框,满足不同...
通过`CCMenu::registerWithTouchDispatcher`方法注册触摸事件,然后在`onTouchBegan`, `onTouchMoved`, `onTouchEnded`等回调中实现逻辑。 6. **暂停和恢复游戏逻辑** 在显示模态对话框时,需要暂停游戏逻辑,例如...
每个菜单项都可以响应用户的触摸事件,执行相应的操作。创建一个简单的菜单,你需要实例化CCMenuItem对象,并将它们添加到CCMenu中。例如: ```cpp CCMenuItem *item1 = CCMenuItemFont::create("Start", this, ...
你可以通过设置其回调函数来响应用户的触摸事件,实现交互功能。 2. **CCLabelTTF与CCLabelBMFont** 这两个类用于显示文本。CCLabelTTF使用TrueType字体,支持动态调整大小和颜色。而CCLabelBMFont则使用位图字体...
每个`CCScene`可以包含一个或多个`CCLayer`,`CCLayer`则可以包含各种游戏对象如精灵(CCSprite)、菜单(CCMenu)等。通过`CCScene::create`方法可以创建一个新的场景实例,然后通过`CCDirector`的`runWithScene`...
5. **触摸事件处理**:通过` CCTouchDispatcher `,开发者可以监听和响应用户的触摸操作,实现与游戏的交互。 6. **粒子系统(Particle System)**:cocos2d-iOS内置了强大的粒子系统,可以快速创建各种特效,如火、...
4. **事件处理**: 了解如何监听和响应用户触摸事件,以及游戏内部的事件。 5. **音频管理**: 学习如何播放背景音乐和音效,控制音量和播放状态。 6. **物理引擎**: 熟悉物理引擎的使用,如设置重力,创建物理对象...
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); CC_BREAK_IF(!pMenu); this->addChild(pMenu, 1); // 添加背景图片 CCSprite *lyl = CCSprite::create("NewScenc.jpg...
触摸事件是移动平台上常见的用户输入方式。Cocos2d-x通过`CCTouchDispatcher`来管理和分发触摸事件。你可以通过继承`CCNode`并重写`onTouchBegan`, `onTouchMoved`, `onTouchEnded`等方法来实现触摸事件的监听。...
`CCMenu`类则用于管理一组`CCMenuItem`,它可以自动排列和对齐这些元素,方便创建菜单布局。 Cocos2D-X 2.2.3中还引入了`CCLabelTTF`和`CCLabelBMFont`来显示文本。`CCLabelTTF`支持TrueType字体,可以动态调整文字...
cocos2d-x提供了丰富的API来处理这些任务,例如`CCDirector`用于控制游戏画面,`CCSprite`用于显示图像,`CCLabel`用于创建文本标签,`CCMenu`和`CCMenuItem`用于创建菜单和按钮。 接下来,我们将创建一个新的C++类...
节点包括场景(CCScene)、图层(CCLayer)、精灵(CCSprite)和菜单(CCMenu)等。每个节点都有一个锚点属性(anchorPoint),定义了变换和定位时的参照点,锚点值是以比例形式表示的,不局限于节点内部。节点还...