今天碰到了一个奇怪的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没有警告。
教训:一些自己写时不太容易犯的错误,如果存在复制的代码中,则不太容易检查出来,因为自己去看代码的时候是顺着代码的意思去看的,也没有去找错误的倾向。