Java 在3个点之间移动模型会导致模型偏离位置

Java 在3个点之间移动模型会导致模型偏离位置,java,android,c++,Java,Android,C++,我有一个立方体,我只在x轴上的3个点(浮动位置)之间移动它。因此立方体将在0.00开始,我按下右键,它将在x轴上向右移动到2.0f。然后我按下左键,它会移回0.0f。然后我再次按左键,它会移动到-2.0f。按下右键应该会将其返回到0.0f,但会超出0。误差的大小取决于我移动的速度 如果我从左键开始,结果也是一样的 if(MoveLeftFlag == true) { if(PositionFlag == 0) { if(Cu

我有一个立方体,我只在x轴上的3个点(浮动位置)之间移动它。因此立方体将在0.00开始,我按下右键,它将在x轴上向右移动到2.0f。然后我按下左键,它会移回0.0f。然后我再次按左键,它会移动到-2.0f。按下右键应该会将其返回到0.0f,但会超出0。误差的大小取决于我移动的速度

如果我从左键开始,结果也是一样的

    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;
            }
        }
    }
if(MoveLeftFlag==true)
{
如果(位置标志==0)
{
如果(立方1.PositionX>MinCubeMovement)
{
Cube1.MoveLocalX(-CubeMoveSpeed*FrameTime);
}
否则如果(立方1.x位置<最小立方移动)
{
PositionFlag=-1;
MoveLeftFlag=false;
}
}
如果(位置标志==1)
{
如果(立方1.x>中间位置)
{
Cube1.MoveLocalX(-CubeMoveSpeed*FrameTime);
}
否则如果(立方1.x位置<中间)
{
MoveLeftFlag=false;
PositionFlag=0;
}
}
}
if(MoveRightFlag==true)
{
如果(位置标志==0)
{
if(立方1.x位置<最大立方移动)
{
Cube1.MoveLocalX(CubeMoveSpeed*FrameTime);
}
否则如果(立方1.PositionX>MaxCubeMovement)
{
MoveRightFlag=false;
位置标志=1;
}
}
如果(位置标志==-1)
{
如果(立方1.x位置<中间)
{
Cube1.MoveLocalX(CubeMoveSpeed*FrameTime);
}
否则如果(立方1.x>中间位置)
{
MoveRightFlag=false;
PositionFlag=0;
}
}
}
帧时间是
float FrameTime=getTimeInMillSeconds()/1000
并且速度设置为'0.000001f;对我来说,它的移动速度非常平稳。
正如我所说,如果我使速度大于立方体第二次返回0.0f时的速度,则偏移误差会变得更大


谁能给我指出正确的方向。

好吧,我已经解决了这个问题,很惊讶我没有意识到这一点,但基本上我在使用>=时使用了<和>,getTimeInMillSeconds()做了什么?它返回自上次调用以来的时间还是自应用程序启动以来的时间?调用每一帧以获得帧时间,然后除以1000以获得Secondary中的帧时间,只需添加-这是andriod opengl es 2.0 frametime=SystemClock.uptimeMillis()/1000;在OnDrawFrame中,如果按right,稍等片刻,然后按left,立方体将返回其起点?你确定吗?是的,它只是在第二次返回起点时失去了它的位置,但在SystemClock.upTimeMillis()1上读取了更多。我认为我没有正确计算帧时间,两份文件指出,这个时钟有时可能会倒转。我将进一步调查并公布我的答案