我问了一个类似的问题,但我想我需要对此更清楚。 使用Andriod和Open GL ES 2.0
这是我的帧时间计算
private long mCurrentTime = SystemClock.uptimeMillis()/1000; // set on entry to the render class
....
long mNewTime = SystemClock.uptimeMillis();
float FrameTime = (mNewTime - mCurrentTime)/ 1000.0f;
mCurrentTime = mNewTime;
要移动我的模型,我现在说类似
Model.MoveX(PositionX += Speed * FrameTime);
这样可以使模型更好。
如果我在3点之间移动,让我们说几次移动后的-10,0和10,模型似乎处于错误的位置。如果我提高速度,错误会变得更加明显。
导致此错误的原因以及如何解决此问题。
下面的是移动立方体的功能
private float MinCubeMovement = -10.0f;
private float MaxCubeMovement = 10.0f;
private float Middle = 0.0f;
private static boolean MoveLeftFlag = false;
private static boolean MoveRightFlag = false;
private int PositionFlag = 0;
....
private void UpdatePlayer(float FrameTime)
{
if(MoveLeftFlag == true)
{
if(PositionFlag == 0)
{
if(Cube1.PositionX >= MinCubeMovement)
{
Cube1.MoveLocalX(-CubeMoveSpeed * FrameTime );
}
else if(Cube1.PositionX <= MinCubeMovement)
{
PositionFlag = -1;
MoveLeftFlag = false;
}
}
if(PositionFlag == 1)
{
if(Cube1.PositionX >= Middle)
{
Cube1.MoveLocalX(-CubeMoveSpeed * FrameTime );
}
else if(Cube1.PositionX <= Middle)
{
MoveLeftFlag = false;
PositionFlag = 0;
}
}
}
if(MoveRightFlag == true)
{
if(PositionFlag == 0)
{
if(Cube1.PositionX <= MaxCubeMovement)
{
Cube1.MoveLocalX(CubeMoveSpeed * FrameTime );
}
else if(Cube1.PositionX >= MaxCubeMovement)
{
MoveRightFlag = false;
PositionFlag = 1;
}
}
if(PositionFlag == -1)
{
if(Cube1.PositionX <= Middle)
{
Cube1.MoveLocalX(CubeMoveSpeed * FrameTime );
}
else if(Cube1.PositionX >= Middle)
{
MoveRightFlag = false;
PositionFlag = 0;
}
}
}
}
MoveLocalX向我的模型类中的positionX添加一个浮点数,这很好用