b2Body在CCSprite上没有正确定位?

时间:2011-11-22 01:49:39

标签: ios cocos2d-iphone box2d ccsprite

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

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

- (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?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

PTM_RATIO存在的唯一原因不是因为Box2D使用米。这是因为Box2D的最佳值范围为0.1到100.0。因此,将所有位置值缩小到该范围内并返回的任何比率都可以。您可以简单地将Box2D位置视为像素位置 - 或者更准确地将其用于iOS设备:点位置。但是,这可能导致Box2D的性能和模拟问题,例如穿透物体等。因此不建议不要使用PTM_RATIO。

我最好的猜测是你只是忽略了用CTM_RATIO改变一次PTM_RATIO,导致错位。唯一的另一种选择是,你只是分别计算了分别缩放Box2D对象的位置或分别代表身体视觉外观的精灵的错误。