首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止触摸通过CCLayer

防止触摸通过CCLayer
EN

Stack Overflow用户
提问于 2012-06-20 14:54:40
回答 2查看 1.6K关注 0票数 1

我有一个用作暂停菜单的CCLayer。它占据了整个屏幕,但目前允许触摸通过它。

我想阻止触摸通过它,但我有一点困难。这就是我所拥有的:

代码语言:javascript
复制
-(id)init{
    if(self = [super init]){
        CGSize s = [[CCDirector sharedDirector] winSize];
        self = [CCLayerColor layerWithColor: ccc4(11, 153, 223, 255) width: s.width height: s.height];
        self.position = CGPointZero;
        self.isTouchEnabled = YES;
        [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

    }
    return self;
}

然而,接触到这一层会导致崩溃,但似乎也能穿过它。

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layer#ccTouchBegan override me'

什么是最简单的方法来防止触摸通过这个粘土层?谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-06-20 15:43:37

在添加层作为目标触摸代理之后,您必须实现CCTargetedTouchDelegate方法。至少

代码语言:javascript
复制
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

此方法是必需的。其他是可选的。而且你不应该以这种方式添加层作为触摸代理。CCLayer类中有一个方法

代码语言:javascript
复制
- (void) registerWithTouchDispatcher

覆盖它,并将您的行放在那里

代码语言:javascript
复制
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

如果你想在一段时间内通过这一层传递数据,你可以写下这一行

代码语言:javascript
复制
[myLayer setIsTouchEnabled: NO];

或者,如果您想在某些rect中捕获触点,则必须在ccTouchBegan:withEvent:方法中实现您的逻辑。如果此方法返回NO,则此触摸可由任何其他触摸委托处理。如果此方法返回YES,则此触摸将不会传递给任何其他触摸委托

票数 4
EN

Stack Overflow用户

发布于 2012-06-20 15:36:24

基本上,所有的cocos2d层都在一个单一的UIView中,所有的接触都不是这个层,而是这个UIView。为了防止接触,你可以尝试从CCTouchDicpatcher中删除委托,将图层的isTouchEnabled属性设置为NO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11114316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档