我试图了解移动物体所需的力量。这就是我的世界设置和物理步骤的完成
private void setupWorld() {
mWorld = new World(new Vector2(0f, -9.8f), true);
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(x, y);
body = world.createBody(bodyDef);
PolygonShape box=new PolygonShape();
box.setAsBox(1,1);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = box;
fixtureDef.density = 1f;
fixtureDef.friction = 0.0f;
fixtureDef.restitution = 0.0f;
Fixture fixture = body.createFixture(fixtureDef);
box.dispose();
}
private void doPhysicsStep(float deltaTime) {
float frameTime = Math.min(deltaTime, 0.25f);
accumulator += frameTime;
while (accumulator >= TIME_STEP) {
body.applyForceToCenter(new Vector2(0, 10f), true);
world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
accumulator -= (TIME_STEP);
}
}
所以我有一个密度为1的1x1盒子。重力设置为-9.8并且我期待当我向我的盒子施加大于重力的力量时(在这个例子中我是将它设置为10)盒子应该开始向上移动。
但是盒子不动了。我必须在开始移动框之前将力设置为大约80(即body.applyForceToCenter(new Vector2(0, 80f), true);
)。
我认为这是由于我的时间步长(我目前设定为1 / 60f),但如果考虑到这一点会减少我在每一步中应用的力量。
有人可以解释一下我在这里算错了吗?
答案 0 :(得分:1)
您的方框的质量为4而非1,因为方法setAsBox(float hx, float hy)
hx
表示所需宽度的一半,而hy
表示所需高度的一半。因此,如果您想要一个1 x 1的盒子,您将拨打setAsBox(0.5F, 0.5F)
。
但这并不能解释为什么你需要一个80的力来移动它,因为50的力量应该足以产生影响。
Fg = m * g = 9.8 * 4 = 39.2
在我对质量4对象的测试项目中,当以编程方式应用时,即使是40的力也是显而易见的(应用程序启动和按下按钮的延迟是显着的,所以我避免它。)