我的测试环境:
Xcode 4.6,新 cocos2d-x+box2d 项目 cocos2d-2.1beta3-x-2.1.1 PhysicsEditor 1.0.10
我在PhysicsEditor cocos2dx 演示的 HelloWorldScene 中进行了一些修改以使其更简单,这是我的一些代码:
初始化物理
重力.Set(0.0f, 0.0f);
这样精灵就不会动了。
将 ccTouchesEnded 中的源代码替换为:
CCTouch* pTouch = (CCTouch *)touches->anyObject();
CCPoint 位置 = pTouch->locationInView(pTouch->view());
CCPoint convLoc = CCDirector::sharedDirector()->convertToGL(location);
b2Vec2 v = b2Vec2(convLoc.x/PTM_RATIO, convLoc.y/PTM_RATIO);
for (b2Body *b = world->GetBodyList(); b; b = b->GetNext()) {
b2Fixture *f = b->GetFixtureList(); // get the first fixture CCSprite *sprite =(CCSprite *) b->GetUserData(); if(sprite != NULL) { if(f -> TestPoint(v)) { CCLog("You touched a body %d",sprite->getTag()); } }
}
问题是 TestPoint 只在一个非常小的区域(不是整个形状区域)返回 true。
这是屏幕截图:
有人可以建议我如何调试这个问题吗?谢谢
更新:显示从 PhysicsEditor 生成的数据