2

私のゲームスレッドでは、高fpsを取得しようとしています-約60
ですが、キャンバスをロックするだけですでに60 fpsになり、
これが私が使用するコードです-

public void run() 
{   
    super.run();
    int FPS = 60; 
                    final long TPF = 1000 / FPS;
    long startTime;
    long sleepTime;

    while (m_run)
    {   
        startTime = SystemClock.uptimeMillis();

        m_canvas = m_surfaceHolder.lockCanvas();
        if (m_canvas != null)
        {            
        }
        m_surfaceHolder.unlockCanvasAndPost(m_canvas);
        sleepTime = TPF - (SystemClock.uptimeMillis() - startTime);
        Log.d("sleep", String.valueOf((SystemClock.uptimeMillis() - startTime)));
    }

しかし、電話するだけでlockCanvasunlockCanvasAndPost60ミリ秒が経過したことがわかります

4

1 に答える 1

3

60fps のような非常に高いフレーム レートが必要な場合は、おそらく SurfaceView の代わりに OpenGL を使用する必要があります。フレームごとに少量から中程度の数のスプライトを描画する SurfaceView を使用して妥当なフレーム レート (例: ~30fps) を得ることができますが、OpenGL を使用せずにそれ以上のことを行うのは難しいと思います。

注: 'Log.d' と 'String.valueOf' への呼び出しは、フレーム レート自体を著しく遅くする可能性があり、これは迷惑な catch-22 です。

于 2013-05-16T23:10:06.803 に答える