我正在使用libgdx和box2d开发一个Android游戏。
我的问题是box2d中的主体插值无法正常工作...主体滞后了一点。如果没有插值,车身将“减少滞后”。
这是我的代码的一部分:
public void gameRunning()
{
mAccumulator += Gdx.graphics.getDeltaTime();
if(mAccumulator > 1f)
{
mAccumulator = 1f;
}
while(mAccumulator >= BOX_STEP)
{
resetSmooth();
mWorld.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);
mAccumulator -= BOX_STEP;
}
mWorld.clearForces();
smooth();
}
public void smooth()
{
float ratio = mAccumulator/BOX_STEP;
float oneMinusRatio = 1.f-ratio;
mSmoothedX = ratio*mBowl.getPosition().x+oneMinusRatio*mPreviousX;
mSmoothedY = ratio*mBowl.getPosition().y+oneMinusRatio*mPreviousY;
mBowl.setTransform(mSmoothedX, mSmoothedY, 0f);
}
public void resetSmooth()
{
mSmoothedX = mPreviousX;
mSmoothedY = mPreviousY;
mPreviousX = mBowl.getPosition().x;
mPreviousY = mBowl.getPosition().y;
}
问题出在哪里?
对不起,我的英语不好,谢谢你……:)
最佳答案
您不应该像这样移动box2d实体,而是施加力/脉冲。否则,它们将无法在物理模拟中正常运行。
另外,您的插值实现对我来说似乎很奇怪,为什么不使用Interpolation class。
例:
mSmoothedX = Interpolation.linear.apply(startx, endx, <time>);