我的测试环境:
Xcode 4.6,新的cocos2d-x + box2d项目 的cocos2d-2.1beta3-X-2.1.1 PhysicsEditor 1.0.10
我修改了HelloWorldScene of PhysicsEditor cocos2dx demo中的一点以使其更简单,以下是我的一些代码:
initPhysics
gravity.Set(0.0f,0.0f);
这样精灵就不会移动了。
将ccTouchesEnded中的源代码替换为:
CCTouch * pTouch =(CCTouch *)touches-> anyObject();
CCPoint location = 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的生成数据
答案 0 :(得分:5)
问题是你只能探测第一个夹具。但复杂的身体是由几个人组成的。原因是
这就是复杂形状被分解为多边形列表的原因。
改为对夹具列表进行迭代。
b2Fixture *f = body->GetFixtureList();
while(f)
{
if(f -> TestPoint(v))
{
CCLog("You touched a body %d",sprite->getTag());
}
f = f->GetNext();
}