私のテスト環境:
Xcode 4.6、新しい cocos2d-x+box2d プロジェクト cocos2d-2.1beta3-x-2.1.1 PhysicsEditor 1.0.10
簡単にするために、PhysicsEditor cocos2dx demo の HelloWorldScene を少し変更しました。コードの一部を次に示します。
initPhysics
重力.セット(0.0f, 0.0f);
スプライトが動かないように。
ccTouchesEnded 内のソース コードを次のように置き換えます。
CCTouch* pTouch = (CCTouch *)touches->anyObject();
CCPoint の場所 = pTouch->locationInView(pTouch->view());
CCPoint convLoc = CCDirector::sharedDirector()->convertToGL(場所);
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 から生成されたデータを表示