body没有正确定位在CCSprite上



我使用Ray Wenderlich的代码从这里:http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone

这是我用来添加b2Body/Def/Fixture到我的CCSprite的代码:

- (void)addBoxBodyForSprite:(CCSprite *)sprite {
    b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2_dynamicBody;
    spriteBodyDef.position.Set(sprite.position.x/CTM_RATIO, sprite.position.y/CTM_RATIO);
    spriteBodyDef.userData = sprite;
    b2Body *spriteBody = world->CreateBody(&spriteBodyDef);
    b2PolygonShape spriteShape;
    spriteShape.SetAsBox(sprite.contentSize.width/CTM_RATIO/2, sprite.contentSize.height/CTM_RATIO/2);
    b2FixtureDef spriteShapeDef;
    spriteShapeDef.shape = &spriteShape;
    spriteBody->CreateFixture(&spriteShapeDef);
}

我选择了CTM_Ratio而不是PTM_Ratio。无论如何,我的b2Bodies没有正确地定位在我的CCSprites上。

所以为了解释我的问题,我会说我的精灵是50像素宽100像素高。看起来我的b2Body在那个精灵上大概是60像素宽110像素高。

我知道Box2D使用米,但是否有任何方法来完美,但b2Body到我的CCSprite可能通过使用像素?

谢谢!

什么是CTM_RATIO?我暂时假设它只是PTM_RATIO的一个不同值,在这种情况下,您可以简单地更改PTM_RATIO值。

PTM_RATIO存在的唯一原因不是因为Box2D使用了米。这是因为Box2D在0.1到100.0的范围内效果最好。所以任何将所有位置值缩小到该范围内的比率都是可以的。你可以简单地将Box2D位置视为像素位置——或者更准确地说,对于iOS设备:点位置。然而,这可能会导致Box2D的性能和模拟问题,例如穿透物体等。所以不建议不使用PTM_RATIO。

我最好的猜测是,您只是忽略了用CTM_RATIO更改PTM_RATIO的一次出现,这导致了不对齐。唯一的另一种选择是,你只是在计算分别缩放Box2D对象的位置或大小时犯了一个错误,分别是代表物体视觉外观的精灵。

最新更新