我使用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对象的位置或大小时犯了一个错误,分别是代表物体视觉外观的精灵。