我在这里使用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?
谢谢!
答案 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对象的位置或分别代表身体视觉外观的精灵的错误。