如何使用PPM缩放Box2D对象?

时间:2018-09-19 03:48:49

标签: c++ box2d sdl-2

我最近遇到了Box2D的问题,我的播放器以慢速移动。我使用LinearImpulse来移动身体,但是(100,100)是最快的运动方式。

经过一些研究后,我知道Box2D主体太大,因为Box2D使用仪表,并且以像素为单位输入。我知道我必须使用PPM常数缩放身体,但是对我来说这没有意义。

我创建了一个PPM常数并将其设置为32.0f。

Scenario Outline:
* def json = { add: 'Product', item: [{ pn: '<itemNum>', qn: 1, m: 'mk'}]}
* print json

Examples:
  | itemNum  |
  | 12345 |
  | 67890 |

这是我创建动态播放器主体的方法:

const float PPM = 32.0f;

我知道我需要按比例缩小身体,方法是将其除以PPM。但是现在身体真的很小,不会与我想要的碰撞。

这是我将脉冲应用于播放器主体的功能:

void Physics::playerDynamic(float x, float y, float width, float height)
{
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(x / PPM, y / PPM);

    body = world.CreateBody(&bodyDef);

    b2PolygonShape dynamicBox;
    dynamicBox.SetAsBox((64.0f) / PPM, (64.0f) / PPM);

    b2FixtureDef fixtureDef;
    fixtureDef.shape = &dynamicBox;
    fixtureDef.filter.categoryBits = CATEGORY_PLAYER;
    fixtureDef.filter.maskBits = CATEGORY_PLAYER;
    fixtureDef.filter.groupIndex = -1;

    body->CreateFixture(&fixtureDef);

    world.Step(timeStep, velocityIterations, positionIterations);

    posX = x;
    posY = y;

    bodyType = "player";
}

}

我已经研究了很长一段时间,这看起来很简单,但是我很难将其应用于我的代码。

那我该怎么办?我可以将身体向上缩放吗?

我还将SDL2用于图形。我需要对渲染进行任何更改吗?

0 个答案:

没有答案