2014-01-08 4 views
1

Это довольно широкий вопрос, но кто-нибудь знает, почему диалоги, похоже, влияют на частоту кадров на Android? Например, когда я показываю и отклоняю диалог во время моей игры, движение становится медленным и изменчивым. Тем не менее, частота кадров в игре взрыва улучшается. Я пробовал все, о чем я могу думать, и ничего не помогает. Любые help очень оценен.Диалоги и изменения FPS

Как показывают диалоги:

private void showPauseMenu() { 
    isRunning = false; //tells the game thread that the game is no longer running 
    paused = true; //tells the game thread that the game is paused 
    ourThread = null; // nulls the Thread object until the game is resumed 
    pause.show(); 
} 

Как избавиться от диалога и начать игру снова:

расчет
isRunning = true; 
ourThread = new Thread(this); 
if (paused) { 
    paused = false; 
    pause.dismiss(); 
} 
ourThread.start(); 

FPS

if (elapsedTime < 33) { 
     timeToSleep = 33 - elapsedTime; 
    } else { 
     timeToSleep = 0; 
     Log.i("fps", "sleeping over 33ms"); 
    } 
    try { 
     Thread.sleep(timeToSleep); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    Log.i("fps", "" + 1000/(elapsedTime + timeToSleep)); 
+0

Кто-нибудь? Я в отчаянии. – ArmaAK

+0

Вы используете OpenGL? – yushulx

+0

Нет, не знаю. Я просто использую графику java. – ArmaAK

ответ

1

Диалог также работать в потоке пользовательского интерфейса. Чем больше загрузок рабочей нагрузки в потоке пользовательского интерфейса, тем ниже FPS. Даже если вы запускаете свою логику игры в игровом потоке, все графические работы все еще выполняются в потоке пользовательского интерфейса. Вот почему диалог повлияет на ваш FPS.

+0

Я понимаю, что вы говорите. Но даже после того, как я отклонил диалог, производительность затруднена. Кроме того, один аспект игры на самом деле становится лучше fps после того, как диалог будет показан и отклонен. – ArmaAK

+0

Как вы вычислили FPS? не могли бы вы опубликовать код? предположим, что ваша стоимость времени до/после 30 мс, 30 мс, 50 ​​мс (диалог ширины), 50 мс, 30 мс, 30 мс – yushulx

+0

if (прошедшее время <33) { timeToSleep = 33 - elapsedTime; } else { timeToSleep = 0; Log.i ("fps", "sleep over 33ms"); } try { Thread.sleep (timeToSleep); } catch (InterruptedException e) { e.printStackTrace(); } Log.i ("fps", "" + 1000/(прошедшееTime + timeToSep)); – ArmaAK

Смежные вопросы