我最近遇到了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用于图形。我需要对渲染进行任何更改吗?