Bag*_*yer 0 physics touch box2d cocos2d-x
我的测试环境:
Xcode 4.6,新cocos2d-x + box2d项目cocos2d-2.1beta3-x-2.1.1 PhysicsEditor 1.0.10
我在PhysicsEditor cocos2dx演示的HelloWorldScene中修改了一下以使其更简单,以下是我的一些代码:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
}
问题是TestPoint只在非常小的区域内返回true(不是整个形状区域).
这是截图:

任何人都可以建议我如何调试这个问题?谢谢
更新:显示PhysicsEditor生成的数据

小智 5
问题是你只能探测第一个夹具.但复杂的身体是由几个人组成的.原因是
这就是复杂形状被分解为多边形列表的原因.
相反,迭代夹具列表.
b2Fixture *f = body->GetFixtureList();
while(f)
{
if(f -> TestPoint(v))
{
CCLog("You touched a body %d",sprite->getTag());
}
f = f->GetNext();
}
Run Code Online (Sandbox Code Playgroud)