У меня возникли проблемы с созданием базовой игровой петли для моей игры. Я нахожусь на ранней стадии, и все, что я хочу сделать, - это перемещать мяч с постоянной скоростью (например: 3) в нижней части экрана. Положение мяча обновляется в методе обновления основной панели, и оно отображается в части рендеринга, как ожидалось. Ничего исключительного в механизме. Шарик движется, но он определенно не является гладким, визуальный тихий, тревожный. Я измерил времена реализации этих методов, и общее время реализации этой пары составляет около 3-4 миллисекунд. В этих условиях, что такое подходящий FPS? Соответствуют ли заданные постоянные значения Что не хватает или неправильно в моем механизме? Заранее большое спасибо. блок кода в основном потоке.Android FPS, как сделать его более плавным?
private final static int MAX_FPS = 200;
private final static int FRAME_PERIOD = 1000/MAX_FPS;
private final static int MAX_FRAME_SKIPS = 5;
public void run() {
initTimingElements();
long beginTime;
long timeDiff;
int sleepTime;
int framesSkipped;
long beginTime2;
long diff1;
long diff2;
sleepTime = 0;
Canvas canvas;
Log.d(TAG, "Starting game loop");
while (running) {
canvas = null;
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
beginTime = System.currentTimeMillis();
framesSkipped = 0;
this.gamePanel.update();
diff1=System.currentTimeMillis()-beginTime;
beginTime2=System.currentTimeMillis();
this.gamePanel.render(canvas);
diff2=System.currentTimeMillis()-beginTime2;
timeDiff = System.currentTimeMillis() - beginTime;
sleepTime = (int) (FRAME_PERIOD - timeDiff);
if (sleepTime > 0) {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
}
}
while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
this.gamePanel.update();
sleepTime += FRAME_PERIOD;
framesSkipped++;
}
if (framesSkipped > 0) {
Log.d(TAG, "Skipped:" + framesSkipped);
}
framesSkippedPerStatCycle += framesSkipped;
storeStats();
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
Посмотрите на [это] (http://www.youtube.com/watch?v=wJYTBjMZJh0) видео (около отметки 34:07). Я не делаю анимации самостоятельно, но это может относиться к вашему ситуация. –