2013-01-10 100 views
6

的頂端爲我的比賽,我想繪製UI元素(TextView的顯示經過時間,按鈕暫停/重新啓動遊戲)我GLSurfaceView使用RelativeLayout的頂部...繪製的Android UI上GLSurfaceView

截止現在,我直接將所有UI元素直接繪製到surfaceView,但考慮到Android UI提供的各種選項(如更改字體和顏色的字體),我決定使用它。

問題:

  • 它是很好的做法,借鑑的GLSurfaceView頂部UI元素還是更直接繪製所有的UI東西自己GLSurfaceView
  • 我將通過使用runOnUiThread()方法定期更新UI元素(說TextView)的內容(每16毫秒)...這是不好的?
  • 我的遊戲是否會受到強迫關閉的影響?

這裏是我使用來設置RelativeLayout的測試java代碼...... glViewGLSurfaceView實例。

rl = new RelativeLayout(this); 
    rl.addView(glView);   
    tv = new TextView(this); 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    lp.addRule(RelativeLayout.ALIGN_TOP); 
    tv.setLayoutParams(lp); 
    tv.setText("FPS: 0"); 
    tv.setBackgroundColor(0x4060ff70); 
    rl.addView(tv); 

    setContentView(rl); 

回答

3
  • 它是很好的做法,借鑑GLSurfaceView的頂部UI元素或者是它更好地吸取所有的UI東西自己直接GLSurfaceView?

這似乎是一個好主意畫上GLSurfaceView的熱門Android的控制,如果你的願望是,Android的佈局系統提供了靈活性。警告雖然這些控件可能比你的glSurfaceView慢得多,所以確保UI不需要太多的圖形能力來渲染,並且不會更新得太快。

渲染你自己的所有東西是一個選項,但是你失去了所有可以從android UI系統獲得的功能。

  • 我將更新UI元素(說的TextView)定期(每16毫秒)通過runOnUiThread()方法的內容......這是壞?

聽起來很好。

  • 我的遊戲容易受到強迫關閉的影響嗎?

這與其他問題沒有任何關係。如果你遵循正確的使用方法,並且不會引發異常,那麼你應該沒問題。如果您確實導致異常,那麼您的應用將被強制關閉(除非您正確處理異常)。

2

我現在在Android遊戲中這樣做我正在做,所以我想我會分享我的經驗。

在GLSurfaceView之上繪製UI元素或者是 最好是直接將自己繪製到GLSurfaceView上?

就我個人而言,我認爲最好使用Android爲您繪製UI的內置UI小部件。在某些情況下它不適合,例如用戶界面控件可以拖動到您的遊戲區域,或者有複雜的動畫或行爲。

如果你在按鈕和textViews之後,那麼我推薦你建議的方法。

我將更新UI元素(說的TextView)的含量 定期(每16毫秒)通過runOnUiThread()方法......這是 壞?

我的遊戲會受到強迫關閉的影響嗎?

我使用相同的系統來更新我的UI組件。我沒有必要每16ms更新一次,但我肯定沒有任何關於強制關閉或無響應用戶界面的問題。

如果你有很多(我正在談論10-20 +)組件定期更新,那麼可能會遇到無響應的UI問題。

您是否需要每16ms(約60FPS)更新視圖?如果需要,您可以更新基礎值以維護正確的邏輯,但僅更新View每20-30FPS以減少在UI線程上運行的數量。

我認爲用戶界面不需要像你的openGL視圖那樣頻繁地更新,因爲你不需要用同樣的方法來繞過。如果textView每秒更新20次,你仍然會感覺到它不斷變化。

+0

是......有道理..你會考慮看看我之前發佈的其他問題嗎? http://stackoverflow.com/questions/14522715/passing-instructions-from-ui-thread-to-rendering-thread-glsurfaceview – BLOB