屏蔽方法:
进入新的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];
否侧 程序会出问题
相关推荐
CC菜单CCMenu将连续集成服务器上项目的构建状态显示为Mac菜单栏中的项目。 它作为CruiseControl项目的一部分开始,该项目构建了第一个连续集成服务器。 有关文档和支持,请访问 。 要下载并安装CCMenu,请访问 。 ...
另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,考虑到原场景中可能会有CCMenu,我将该 Layer 的 优先级设为了 与 CCMenu 相同,因为后添加的原因,所以总能屏蔽Menu 的事件, 而且在 Layer 上再...
在Mac OS X菜单栏中显示连续集成服务器的状态。 与所有支持“ cctray”提要的服务器一起使用,其中包括ThoughtWorks Go,Jenkins,Travis等。
菜单是我们在开发中经常用到的元素,cocos2d-x中的菜单基本上是分装了文本类和精灵类,代码注释有详细的说明,看代码吧! bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::...
CCMenu *menu = CCMenu::create(pause, NULL); menu->setAnchorPoint(ccp(0, 0)); addChild(menu, 1, 10); menu->setPosition(CCPointZero); // 调 update函数 scheduleUpdate(); // 每秒调一次 ...
使用Cocos2d-x 2.1.3制作的带有游戏内关卡编辑器的CutTheRope类似游戏演示。 该游戏具有便携性,可以在ios和android上运行。... 因此,我只使用CCMenu来显示级别菜单。 参考: 执照: 做您想公开许可的事情( )。
git pull --rebase grunt pre-commit 修复任何错误git push检查构建状态要查看构建状态并获取有关构建状态的通知: 访问并点击屏幕右上角的“CCTray” 将 XML 配置添加到开发机器上的 CCTray 或 CCMenu 您还可以在...
将 XML 配置添加到开发机器上的 CCTray 或 CCMenu 您还可以在此处访问 CI 服务器并查看构建状态 技术栈 技术堆栈中有许多部分,但其中许多只是为了提供自动化,不必为了构建 Proto Watch 应用程序而接触或理解。 ...
将 XML 配置添加到开发机器上的 CCTray 或 CCMenu 您还可以在此处访问 CI 服务器并查看构建状态 技术栈 技术堆栈中有许多部分,但其中许多只是为了提供自动化,不必为了构建 Proto Watch 应用程序而接触或理解。 ...
将 XML 配置添加到开发机器上的 CCTray 或 CCMenu 您还可以访问 CI 服务器并在此处查看构建状态 技术栈 技术堆栈中有许多部分,但其中许多只是为了提供自动化,不必为了构建 Proto Watch 应用程序而接触或理解。 ...
将XML配置添加到开发计算机上的CCTray或CCMenu 您也可以在此处访问CI服务器并查看构建状态 科技栈 技术堆栈中有很多组件,但是其中许多组件只是为了提供自动化功能,而无需为构建Proto Watch应用程序而动容或理解...
将XML配置添加到开发计算机上的CCTray或CCMenu 您也可以在此处访问CI服务器并查看构建状态 科技栈 技术堆栈中有很多组件,但是其中许多组件只是为了提供自动化功能,而无需为构建Proto Watch应用程序而动容或理解...
将XML配置添加到开发计算机上的CCTray或CCMenu 您也可以在此处访问CI服务器并查看构建状态 科技栈 技术堆栈中有很多组件,但是其中许多组件只是为了提供自动化功能,而无需为构建Proto Watch应用程序而动容或理解...
buildnotify:基于系统任务栏的构建状态通知应用程序,用于cctray.xml提要