0

我在这里使用 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 没有正确定位在我的 CCSprite 上。

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

我知道 Box2D 使用米,但有什么办法可以完美地但 b2Body 到我的 CCSprite 上可能是通过使用像素

谢谢!

4

1 回答 1

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 对象的位置或大小以及表示身体视觉外观的精灵时犯了一个错误。

于 2011-11-23T12:28:26.540 回答