Box2d自定义多边形和精灵错配

时间:2012-01-03 09:41:05

标签: iphone cocos2d-iphone polygon retina-display box2d-iphone

我正在使用物理编辑器在Box2d中创建多边形。它生成多边形并在非视网膜显示器中工作正常,但在视网膜显示器中不起作用.....我已经为两个显示器附加了屏幕截图。现在,当进入视网膜显示时,多边形未设置在这里的车是这个的形象

It works completely in non-retina display

It doesn't work with the same polygon as of the sprite - Retina Display

这是我在项目中使用的代码

CCSprite *car = [CCSprite spriteWithFile:@"opp_car.png"];
[car setPosition:ccp(wSize.width/2+50,wSize.height/2-120)];
[self addChild:car];
b2BodyDef spriteBodyDef;
spriteBodyDef.type = b2_dynamicBody;    
spriteBodyDef.userData = car;
spriteBodyDef.position.Set(car.position.x/PTM_RATIO, car.position.y/PTM_RATIO);
b2Body *spriteBody = _world->CreateBody(&spriteBodyDef);

b2PolygonShape spriteShape;
[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"opp_car-hd.plist"];
[[GB2ShapeCache sharedShapeCache] addFixturesToBody:spriteBody forShapeName:@"opp_car-hd"];
[sprite setAnchorPoint:[[GB2ShapeCache sharedShapeCache]anchorPointForShape:@"opp_car-hd"]];

任何帮助都会得到赞赏

感谢.......

2 个答案:

答案 0 :(得分:2)

这是因为cocos2d在点上工作(1点在视网膜显示器上是2个像素),但是box2d绘制物体的方式(调试绘图)使用像素。身体的创造是完美的(如果您考虑到视网膜显示,那么您的世界将在两个维度上都是两倍大,导致视网膜和非视网膜设备之间的物理差异),而是您需要修复调试绘制方法。在某个地方会有一行结束new GLESDebugDraw(PTM_RATIO); - 将其更改为new GLESDebugDraw(PTM_RATIO * CC_CONTENT_SCALE_FACTOR());,你应该会很好。

答案 1 :(得分:0)

只需添加[car setPosition:ccp(0,0)];

它会起作用:))