繁体   English   中英

如何正确处理多层触摸事件?

[英]how to properly handle touch events for multiple layers?

我目前有一个“ Console” CClayer,它正在处理已添加到其中的精灵的触摸检测。 不过,我也有一些精灵,我想要做的触摸检测上没有控制台层的一部分......目前,他们从CCNode继承的类的儿童。

我的理解是,cocos对象将“ isTouchEnabled”属性设置为true的次数越多,性能的影响就越大,所以我很好奇该如何处理?

我是不是该:

A)控制台的touchesBegan方法是否执行了对属于CCNode的精灵的检测?

B)只需在CCNode对象上实现isTouchEnabled

C)其他方法?

好吧,对于初学者来说,只有在您担心时,才应该关注性能,例如,您正在观察或测量(在DEVICES而非模拟器上)一些不合适的响应时间。

我会避免检测到与另一个节点有关的触摸-软件方面可能会变得混乱。 当触摸位于检测节点关注的对象的位置时,我倾向于严格返回YES(从ccTouchBegan)。 当您返回NO时,调度程序将触摸其他处理程序(在控制台“下方”),直到一个此类CCNode咬住。 种类如下:

- (void) onEnter{
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}

- (void) onExit{
    [[[CCDirector sharedDirector] touchDispatcher] removeDelegate:self];
[super onExit];
}

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
    if (!_visible || !_enabled) {
        return NO;
    }
    CGPoint loc = [touch locationInView:touch.view];
    loc = [[CCDirector sharedDirector] convertToGL:loc];

    if ([self containsPoint:loc]) {
        // do your thing here !
        return YES;
    }

    return NO;
}

-(BOOL) containsPoint:(CGPoint) location {
    // determine here whether this node should be handling
    // this touch.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM