我的游戏有一些奇怪的口吃问题,即使我的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;
}
}
答案 0 :(得分:1)
尝试删除Log.i()
来电,如果您还没有!
编辑:
或者,删除浮点。 elapsed
不需要加倍,只需保留整数计数毫秒。然后,您可以在移动计算中使用mY-=100*elapsed/1000;
,并注释掉或删除其他浮点计算(fps
,fpscount
)。
答案 1 :(得分:1)
尝试使用traceview分析您的代码。