2011-06-23 4 views
2

У меня есть небольшая проблема с моей реализацией на Android. Я передаю некоторые вещи с OpenGL ES. И для каждого фрейма мне нужно обновить дату. Поэтому я решил поставить максимум FPS, чтобы избежать бесполезных вычислений.Проблема FPS на android

Но дело в том, что независимо от количества кадров в секунду, которое я ставлю, я не вижу никакой разницы. Даже если я ставлю 1 fps.

Вот немного для моего кода:

long now = SystemClock.elapsedRealtime(), diff;  
diff = now - CURRENT_TIME;  
if (diff < MILLISECOND_PER_FRAME)  
{  
    try  
    {  
    wait(MILLISECOND_PER_FRAME - diff);  
    }  
    catch(Exception e)  
    {}  
    now = SystemClock.elapsedRealtime();  
    diff = now - CURRENT_TIME;  
}  
CURRENT_TIME = now; 

Итак, что часть кода, кажется, не замедляет выполнение на всех. Любое предложение ?

И только я случай, если кто имеет сомнение, для X кадров в секунду, я вычисляю MILLISECOND_PER_FRAME в

MILLISECOND_PER_FRAME = (int)(1000.0f/X); 

Решенные:

Хорошо, так что я решил эту проблему. Если кто-либо из вас хочет, чтобы поток спал в течение определенного периода времени в миллисекундах, используйте Thread.sleep (millis) ;. Эта функция влияет на поток, в котором он работает. И теперь я вижу большую разницу, когда я ставлю 1 к/с против 25 кадров в секунду.

Спасибо всем, кто посмотрел на этот вопрос.

+1

Вы можете ответить на свой вопрос ниже. – Reno

ответ

0

Приветствия,

хотя вы решили эту проблему, кажется, что вы делаете это с того конца. Было бы лучше оставить рендеринг на его скорости и только обновить состояние приложения через определенные промежутки времени. Это означает, что нить не спала, просто условие, чтобы проверить, прошло ли достаточно времени для обновления.

Это кажется чистым решением. Я не уверен, какие эффекты будут иметь на вашем телефоне, если вы заблокируете поток рендеринга (потому что он работает с графическим оборудованием, на самом деле вы можете затормозить и другие (системные) потоки). Не уверен, что это хорошо.

С другой стороны, для некоторых приложений, не имеющих никакого смысла, что-то может иметь смысл (но будет реализовано намного лучше, возвратившись из функции рендеринга сразу, без замены передних и задних буферов - что я не уверен в возможностях на Android).

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