接上一篇,我们看看五角星和反弹棒碰撞时的代码:
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair star:(CCNode *)star stick:(CCNode *)stick{ Star *starTmp = (Star*)star; //star形状是五角星,可能会在短时间内多次发生碰撞;但在star已经由第一次碰撞时删除掉从而导致star为nil //所以这里要确保star不为nil. if (!starTmp) { return YES; } switch (starTmp.starType) { case starTypeStickLonger: @synchronized(self){ [Star doStickLongerWork:self.stickInGameScene]; } break; case starTypeStickShorter: @synchronized(self){ [Star doStickShorterWork:self.stickInGameScene]; } break; case starTypeUnknown: case starTypeMax: NSAssert(NO, @"error star type!"); break; default: break; } //省略无关代码 }
根据star的类型,我们执行不同效果.
其实问题就出现在这段代码中,只是当时我还看不出来.
如果你也看不出来,那我们接着往下看吧 ;)