【问题标题】:Box2d custom polygon and sprites mis-matchingBox2d 自定义多边形和精灵不匹配
【发布时间】:2012-01-03 09:41:05
【问题描述】:

我正在使用物理编辑器在 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"]];

任何帮助将不胜感激

谢谢.......

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢@jrtc27 的建议......该建议有效,但多边形的大小增加了一倍......我尝试使用#define PTM_RATIO 16 它适用于Retina Display...... 。 非常感谢! jrtc27
    【解决方案2】:

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

    它会起作用的:)

    【讨论】:

    • 它可以工作,但是当转到 ccp(0,0) 位置时,多边形会过去。但是当我将位置设置为 ccp(100,100) 时,它给出了相同的位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多