gpt4 book ai didi

java - 如何获取物体在 box2D 世界步骤中移动的距离?

转载 作者:行者123 更新时间:2023-11-30 06:56:53 25 4
gpt4 key购买 nike

我正在尝试为我的游戏循环实现线性插值和固定时间步长。我正在使用 libGDX 引擎和 box2D。我试图找出模拟在这样的世界步骤中移动角色 body 的量:

  old_pos = guyBody.getPosition();
world.step(STEP_TIME, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
new_pos = guyBody.getPosition();
printLog(new_pos.x-old_pos.x);

每次都会返回 0。模拟效果很好, body 每一步都明确移动。

附加代码:

@Override
public void render(float delta) {

accumulator+=delta;
while (accumulator>=STEP_TIME){
accumulator-=STEP_TIME;
stepWorld();
}
alpha = accumulator/STEP_TIME;
update(delta);
//RENDER
}


private void stepWorld() {
old_pos = guyBody.getPosition();
old_angle = guyBody.getAngle() * MathUtils.radiansToDegrees;
world.step(STEP_TIME, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
new_angle = guyBody.getAngle() * MathUtils.radiansToDegrees;
new_pos = guyBody.getPosition();
}

我正在尝试使用 Alpha 来检查物理步骤之间的距离,以便我可以插值 Sprite 的位置。

谢谢!

最佳答案

Body 的 getPosition 方法正在返回 Vector引用 - 这意味着您不按值复制它,而仅将位置对象上的“指针”分配给 old_pos/new_pos。但是,您在 step 之前分配一次,然后在 step 之后分配一次,所有这两个变量都在 step< 之后保持同一对象 的状态 已经。

您需要做的是按值复制位置 vector - 为此,您可以使用 Vector 的 cpy() 方法。

您的代码应该如下所示

old_pos = guyBody.getPosition().cpy();
world.step(STEP_TIME, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
new_pos = guyBody.getPosition().cpy();
printLog(new_pos.x-old_pos.x);

如果您不使用 y 坐标,您还应该考虑仅将 x 保留在 float 类型变量中,以免复制整个对象(但是它不会真正影响您的性能) .

关于java - 如何获取物体在 box2D 世界步骤中移动的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com