cocos2d 触摸响应失效

今天碰到了一个奇怪的bug,记录下。

// 头文件
@interface A : CCLayer
...
@end

// 源文件
@implementation A
- (id)init{
    if(self = [super init]){
        ...
        [self setIsTouchEnabled:YES]; // 不等同于isTouchEnabled_ = YES
    }
}
@end

问题描述:CCLayer默认遵循标准触摸协议,又在init中 执行了[self setIsTouchEnabled:YES];但是始终不能触发触摸响应函数。

分析:经过调试,发现居然是CCLayer中的isRunning_为NO,以前倒是从没碰到过。而isRunning_只有在CCNode的-(void) onEnter;中才会置YES

-(void) onEnter
{
    [children_ makeObjectsPerformSelector:@selector(onEnter)];    
    [self resumeSchedulerAndActions];
    
    isRunning_ = YES;
}

但奇怪的是onEnter的isRunning_ = YES;没有执行到,而界面显示完全正常。

仔细检查代码发现是其他地方的一个内存错误,但xCode没有警告。

教训:一些自己写时不太容易犯的错误,如果存在复制的代码中,则不太容易检查出来,因为自己去看代码的时候是顺着代码的意思去看的,也没有去找错误的倾向。

原文地址:https://www.cnblogs.com/pure/p/2535237.html