2014-04-07 54 views
1

當我運行我的應用程序在libgdx(和使用libgdx,即使是谷歌市場的其他應用程序)編寫它經常顯示在25-30 FPS和它應該是60 FPS通過默認。Libgdx經常在Android設備簡歷後低fps

有時它很好,顯示速度爲60 fps,但是在我退出並再次輸入應用程序或者暫停/恢復之後,它以25-30 fps或60 fps隨機顯示。它只發生在我的Android設備上(桌面很好)2.3.6(Samsung Galaxy S Advance)當我在Ainol HERO 10上運行它時,沒有任何問題。

這裏是我的代碼,我已經測試這個問題寫:

public class FpsTest implements ApplicationListener{ 
    OrthographicCamera cam; 
    ShapeRenderer shapeRenderer; 
    SpriteBatch batcher; 
    BitmapFont bf; 

    public void create() { 
     bf = new BitmapFont(); 
     cam = new OrthographicCamera(); 
     cam.setToOrtho(false, Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()/4); 
     batcher = new SpriteBatch(); 
     batcher.setProjectionMatrix(cam.combined); 
    } 
    public void resize(int width, int height) {} 
    public void render() { 
     Gdx.gl.glClearColor(0,0.2f,0,1); 
     Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); 

     batcher.begin(); 
     bf.draw(batcher, "FPS: "+String.valueOf(Gdx.graphics.getFramesPerSecond()), 35, 120); 
     batcher.end(); 
    } 
    public void pause() {} 
    public void resume() {} 
    public void dispose() {} 
} 

此外,我做了一個簡短的電影我的問題:https://www.youtube.com/watch?v=YjMr9fBYhHA&feature=youtu.be :)

+0

這個「Framedrop」只需要幾秒鐘,還是停留更長時間?在後臺運行多少個程序? – Springrbua

+2

This:'「FPS:」+ String.valueOf(Gdx.graphics.getFramesPerSecond())'很可能會產生垃圾,導致GC立即踢球。嘗試使用StringBuilder來代替(libgdx附帶的)。此外,使用(幾乎)空的渲染方法可能會導致設備降低幀率以節省電池壽命。 – Xoppa

+0

https://code.google.com/p/libgdx/issues/detail?id=1024 – Chase

回答

0

由於official API documentation指出,Gdx.graphics.getFramesPerSecond()回報平均值。

你不能依賴它來獲得準確的幀率報告。改爲使用Gdx.graphics.getRawDeltaTime(),然後計算它的反轉,將其轉換爲FPS。

+0

無論如何我使用.getFramesPerSecond()或.getRawDeltaTime()並從中計算FPS。它總是幾乎相同的結果。此外它不僅顯示更低的FPS,動畫也表現得像它以更低的幀率顯示。 – lukasz