我正在尋找示例代碼示例,展示如何使用 Android SurfaceView每秒達到30幀?假設每個框架從x和y位置開始繪製一個圓,每個框架將x和y增加1。如何使用Android SurfaceView實現每秒30幀?
獎勵問題: 除上述之外,我想覆蓋另一個視圖以顯示文本內容,以便在此文本內容下顯示任何圖形。如何做到這一點?
我正在尋找示例代碼示例,展示如何使用 Android SurfaceView每秒達到30幀?假設每個框架從x和y位置開始繪製一個圓,每個框架將x和y增加1。如何使用Android SurfaceView實現每秒30幀?
獎勵問題: 除上述之外,我想覆蓋另一個視圖以顯示文本內容,以便在此文本內容下顯示任何圖形。如何做到這一點?
讓一個線程執行此30次:
事實上,如果你的線程只是坐在那裏做,而不試圖暫停,它將被扼殺到屏幕的幀速率。
您需要確保該線程與表面視圖的管理正確同步 - 例如,如果表面正在更改或被銷燬,那麼您的代碼應該與線程同步以確保線程停止運行有時候是這樣的。
當然這意味着你正在軟件渲染到畫布中。根據你在做什麼,這可能很好,給你30幀/秒的動畫。如果沒有,你需要使用GLSurfaceView。無論如何,您可能會考慮使用它,只是因爲它會爲您處理線程部分。
如果你想要高幀率,你真的需要閱讀GLSurfaceView。在正常的表面視圖下,您將受到費用佈局計算和以CPU爲中心的渲染的束縛。藉助GLSurfaceView,您可以將其卸載到GPU上,並對佈局進行嚴格有效的控制。
這可能是一個古老的線程,但我認爲這可以幫助其他人。 這裏是一個很好的教程中,我使用surfaceView發現: http://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html
這裏是關於如何實現遊戲環,它可以幫助限制FPS 30一篇好文: http://www.koonsolo.com/news/dewitters-gameloop/
您可以添加文字直接向您的surfaceView如果你喜歡, 下面是一個例子
public void onDraw(Canvas canvas) {
...
// Add text
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFakeBoldText(true); // if you like bold
paint.setShadowLayer(5, 5, 5, Color.GRAY); // add shadow
paint.setColor(Color.WHITE);
paint.setTextSize(30);
canvas.drawText("FPS: " + _fps, 10, 35, paint);
}
GLSurfaceView能加速繪圖(因爲你使用OpenGL繪製的話)。它不排除佈局計算......事實上,在繪製過程中不應該有佈局計算,甚至是繪製常規視圖層次結構。 – hackbod 2011-01-30 22:10:41
「它不會擺脫佈局計算」 - 我說過了嗎? 「在繪圖期間不應該有佈局計算髮生」 - 我沒有說我是不是?但是,談論**幀速率**通常意味着某些東西在移動/改變,這會影響佈局計算。如果你使用本地佈局管理器,這將是昂貴的。 – 2011-01-30 23:32:44