【发布时间】:2017-01-13 04:42:28
【问题描述】:
我正在尝试为我的游戏循环实现线性插值和固定时间步长。我正在使用 libGDX 引擎和 box2D。我试图找出模拟在这样的世界步骤中移动我的角色身体的量:
old_pos = guyBody.getPosition();
world.step(STEP_TIME, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
new_pos = guyBody.getPosition();
printLog(new_pos.x-old_pos.x);
这每次都返回 0。模拟效果很好,身体每一步都在移动。
附加代码:
@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 的位置。
谢谢!
【问题讨论】:
-
试试
printLog(new_pos.x)和printLog(old_pos.x),值是多少? -
它们更新,但它们始终相同: I/OUT:: -54.899673 I/OUT:: -54.899673 I/OUT:: -- I/OUT:: -54.229126 I/OUT :: -54.229126 I/OUT:: -- I/OUT:: -53.55858 I/OUT:: -53.55858 I/OUT:: --
-
注意 new_pos 和 old_pos 是一样的吗??
-
是的,它们不应该不同吗?
-
是的,它应该基于您的要求,但显然涉及到一个循环,只需将“old_pos”存储在循环之外。您提供的代码有限,因此很难看到发生了什么。