1

我正在使用物理编辑器在 Box2d 中创建多边形。它生成多边形并在非视网膜显示器中工作正常,但在视网膜显示器中不起作用.....我已经附上了两个显示器的屏幕截图。现在当谈到视网膜显示器时,多边形没有设置在这辆车上,这是它的图像

它完全适用于非视网膜显示器

它不适用于与精灵相同的多边形 - 视网膜显示

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

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"]];

任何帮助,将不胜感激

谢谢.......

4

2 回答 2

2

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

于 2012-01-03T12:16:32.047 回答
0

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

它会工作:)

于 2012-01-03T10:05:04.330 回答