0

我目前有一个“控制台”CClayer,它正在处理已添加到其中的精灵的触摸检测。但是,我也有一些我想要进行触摸检测的精灵,它们不属于控制台层......它们目前是从 CCNode 继承的类的子级。

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

我是不是该:

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

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

C)其他一些方法?

4

1 回答 1

0

好吧,对于初学者来说,如果您担心,您应该只关注性能,即您正在查看或测量(在设备上而不是模拟器上)一些不适当的响应时间。

我会避免检测涉及另一个节点的触摸——它可能会变得混乱,软件明智。当触摸位于检测节点关注的对象的位置时,我倾向于严格返回 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.
}
于 2012-10-29T23:58:00.303 回答