2014-01-08 67 views
1

這是一個相當廣泛的問題,但有誰知道爲什麼對話框似乎影響Android上的幀率?例如,當我在遊戲運行時顯示和解除對話框時,運動變得緩慢且波濤洶涌。但是,遊戲內爆炸的幀率會提高。我試過了我能想到的每件事情,似乎沒有任何幫助。任何幫助大大讚賞。對話框和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

該對話框還可以在UI線程中運行。在UI線程中運行的工作負載越多,FPS就越低。即使您在遊戲線程中運行遊戲邏輯,所有圖形工作仍然在UI線程中運行。這就是爲什麼對話會影響你的FPS。

+0

我明白你在說什麼。但即使在我放棄對話後,表現也受到阻礙。另外,遊戲的一個方面在對話被顯示和解除之後實際上變得更好。 – ArmaAK

+0

你是如何計算FPS的?你可以發佈代碼嗎?假設您在30ms,30ms,50ms(寬度對話框),50ms,30ms,30ms之前/之後的時間成本如果(elapsedTime <33) – yushulx

+0

timeToSleep = 33 - elapsedTime;其他{ timeToSleep = 0; (「fps」,「睡在33ms以上」); } try { Thread.sleep(timeToSleep); (InterruptedException e){ e.printStackTrace(); (「fps」,「」+ 1000 /(elapsedTime + timeToSleep)); – ArmaAK