2011-06-23 16 views
2

私はアンドロイドの実装に小さな問題があります。私はOpenGL ESでいくつかのものをレンダリングしています。そして、各フレームについて、私は自分の日付を更新する必要があります。だから私は無駄な計算を避けるために最大FPSを置くことに決めました。アンドロイドのFPS問題

しかし、事実は、1秒あたりのフレーム数が何であれ、何の違いも見られません。 1fpsを入れても。ここで

は、私のコードのビットがあります:

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のFPSのために、私は

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

としてMILLISECOND_PER_FRAMEを計算を解決しました。あるスレッドが特定の時間(ミリ秒)スリープする場合は、Thread.sleep(millis);を使用します。この関数は、実行中のスレッドに影響します。そして今、1fpsを25fpsに設定すると大きな違いが見られます。

この質問を読んだ皆さん、ありがとうございます。

+1

下記の独自の質問に答えることができます。 – Reno

答えて

0

乾杯、

あなたが問題を解決しているが、あなたが間違って端からそれをやっているようです。レンダリングを速くしておき、一定の間隔でアプリケーションの状態を更新するほうがよいでしょう。これはスレッドがスリープしていないことを意味し、更新を行うのに十分な時間が経過したかどうかを確認するための条件に過ぎません。

これはよりクリーンなソリューションのようです。レンダリングスレッドにブレーキをかけると(実際にはグラフィックスハードウェアで動作するため、実際には他の(システム)スレッドも停止している可能性があります)、あなたの携帯電話にどのような影響があるかわかりません。それが良いことであるかどうかは分かりません。

一方、何もレンダリングしていないアプリケーションでは意味をなさないかもしれませんが(ただし、フロントとバックのバッファを交換せずにすぐにレンダリング関数から戻って実装するほうがはるかに良いでしょう。 )。

関連する問題