Libgdx Box2d Body 直线方向移动?
Libgdx Box2d Body move in a linear direction?
我制作了一个 body,我想在单击按钮时移动它,我已经能够使用 body.setLinearVelocity()
移动 body,但它不准确。假设我想以 40 的线性 X 速度移动我的 body 七米,我该怎么做?
//BODY MOVEMENT
//timer = I try to move the body for a certain amount of time
/*isMoveRight and isMoveLeft are Just booleans for activating and deactivating movement*/
if(Gdx.input.isKeyJustPressed(Input.Keys.RIGHT)){
timer = 0f;
isMoveRight = true;
isMoveLeft = false;
}else if(Gdx.input.isKeyJustPressed(Input.Keys.LEFT)){
timer = 0f;
isMoveLeft = true;
isMoveRight = false;
}
if(isMoveRight == true && timer < 0.1f){
timer += 1f * delta; //activate timer
body.setLinearVelocity(52f, 0f);
}else if(isMoveLeft == true && timer < 0.1f){
timer += 1 * delta;
body.setLinearVelocity(-52f, 0f);
}
我可以只使用 body.setTransform()
但我需要 body 来实际移动而不是传送。提前谢谢你
我不知道你的代码示例有多完整,但从我在这里看到的情况来看,你至少错过了在 0.1 秒后将速度重置为 0 的部分。
else {
body.setLinearVelocity(0F, 0F);
}
除此之外,您的方法在移动距离方面有轻微的模糊性,因为取决于您的帧速率,您的检查 timer < 0.1f
不是很准确:
timer = 0.099 -> distance = 5.148
timer = 0.132 -> distance = 6.881 (one frame later with 30 frames/second)
一些(未经测试的)想法如何处理这个问题:
我制作了一个 body,我想在单击按钮时移动它,我已经能够使用 body.setLinearVelocity()
移动 body,但它不准确。假设我想以 40 的线性 X 速度移动我的 body 七米,我该怎么做?
//BODY MOVEMENT
//timer = I try to move the body for a certain amount of time
/*isMoveRight and isMoveLeft are Just booleans for activating and deactivating movement*/
if(Gdx.input.isKeyJustPressed(Input.Keys.RIGHT)){
timer = 0f;
isMoveRight = true;
isMoveLeft = false;
}else if(Gdx.input.isKeyJustPressed(Input.Keys.LEFT)){
timer = 0f;
isMoveLeft = true;
isMoveRight = false;
}
if(isMoveRight == true && timer < 0.1f){
timer += 1f * delta; //activate timer
body.setLinearVelocity(52f, 0f);
}else if(isMoveLeft == true && timer < 0.1f){
timer += 1 * delta;
body.setLinearVelocity(-52f, 0f);
}
我可以只使用 body.setTransform()
但我需要 body 来实际移动而不是传送。提前谢谢你
我不知道你的代码示例有多完整,但从我在这里看到的情况来看,你至少错过了在 0.1 秒后将速度重置为 0 的部分。
else {
body.setLinearVelocity(0F, 0F);
}
除此之外,您的方法在移动距离方面有轻微的模糊性,因为取决于您的帧速率,您的检查 timer < 0.1f
不是很准确:
timer = 0.099 -> distance = 5.148
timer = 0.132 -> distance = 6.881 (one frame later with 30 frames/second)
一些(未经测试的)想法如何处理这个问题: