奇怪的口吃问题与GC无关

时间:2010-12-22 12:27:20

标签: java android opengl-es

我的游戏有一些奇怪的口吃问题,即使我的FPS似乎从未降到30以下。大约每5秒我的游戏就会停滞不前。由于我的垃圾收集问题,我原本每1-2秒就会出现口吃,但是我已经对它们进行了排序,并且通常会在没有垃圾收集的情况下进行15-20秒。

尽管如此,即使在口吃附近任何地方没有列出GC的情况下,我的游戏仍然会定期停顿。即使我拿出大部分代码并简单地将我的“物理”代码改为下面的代码,我也会遇到这种奇怪的减速问题。我觉得我错过了某些东西或忽略了某些东西。

我投入的“已过去”代码不应该停止与FPS变化相关的主角速度的任何变化吗?

任何输入/理论都会很棒。

物理:

private void updatePhysics()
{
    //get current time
    long now = System.currentTimeMillis();

    //added this to see if I could speed it up, it made no difference
    Thread myThread = Thread.currentThread();
    myThread.setPriority(Thread.MAX_PRIORITY);

    //work out elapsed time since last frame in seconds
    double elapsed = (now - mLastTime2) / 1000.0;

    mLastTime2 = now;

    //measures FPS and displays in logcat once every 30 frames
    fps+=1/elapsed;
    fpscount+=1;

    if (fpscount==30)
    {
        fps=fps/fpscount;
        Log.i("myActivity","FPS: "+fps+" Touch: "+touch);
        fpscount=0;
    }

    //this should make the main character (theoretically) move upwards at a steady pace
    mY-=100*elapsed;

    //increase amount I translate the draw to = main characters Y 
    //location if the main character goes upwards
    if (mY<=viewY)
    {
        viewY=mY;
    }
}

2 个答案:

答案 0 :(得分:1)

尝试删除Log.i()来电,如果您还没有!

编辑:

或者,删除浮点。 elapsed不需要加倍,只需保留整数计数毫秒。然后,您可以在移动计算中使用mY-=100*elapsed/1000;,并注释掉或删除其他浮点计算(fpsfpscount)。

答案 1 :(得分:1)

尝试使用traceview分析您的代码。