按帧时间移动模型会产生位置错误

时间:2014-02-17 12:08:14

标签: java android opengl-es game-engine game-physics

我问了一个类似的问题,但我想我需要对此更清楚。 使用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添加一个浮点数,这很好用

0 个答案:

没有答案