
原来整个关卡场景放在GameScene.ccb中,后来觉得移到专门的Level.ccb比较好.
移动过后编译运行,只要移动Player的胳膊发射子弹时,Xcode报错:
g due to Chipmunk error: Body's angular velocity is invalid.
Failed condition: body->w == body->w && cpfabs(body->w) != INFINITY
Source:/Users/pp/src/xcode/ios_src/ShootBall.spritebuilder/Source/libs/cocos2d-iphone/external/Chipmunk/src/cpBody.c:123
检查后发现错误发生在touch事件中,但从错误信息较难推测实际原因.遂从反向推测原因.
移动布局后,原来的物理对象已经不再GameScene.ccb中,原来的引用还在吗?在GameScene加载方法中添加如下断言:
NSAssert(_physicWorld, @"physicWorld must not nil");
编译执行App后果然报错!在查找需要引用该物理对象的代码,在子弹初始化中有这么一句:
[_physicWorld addChild:bullet];
由此可见子弹对象没有正确添加到物理对象中去,导致错误的发生.知道原因解决也就简单了,添加查找物理对象的代码即可:
_physicWorld = (CCPhysicsNode*)[self getChildByName:@"physicWorld" recursively:YES];