我想創建一個基於2D遊戲框架的簡單遊戲,如2011年Apress書籍「Mario Zechner開始Android遊戲」所述。也許這有幫助,也許它不會,但是無論如何:SurfaceView和添加和刪除其他視圖
我只有一個活動的整個遊戲。一切都渲染到位圖上,然後發送到SurfaceView,發送到SurfaceView的內容將根據遊戲的屏幕而變化。
我想實現一個簡單的高分值系統,讓用戶在主菜單屏幕上輸入他們的名字到EditView中。我已經能夠將SurfaceView和EditView與RelativeLayout相結合,但是一旦用戶移過主菜單屏幕,問題就是擺脫了EditView。
還有很多這一類,但這裏的什麼,我覺得一個snipet是很重要的:
public abstract class AndroidGame extends Activity implements Game{
public EditText et;
public RelativeLayout rl;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
et = new EditText(this);
renderView = new AndroidFastRenderView(this, frameBuffer);
rl = new RelativeLayout(this);
rl.addView(renderView);
rl.addView(et);
setContentView(rl);
}
}
以上是遊戲唯一的活動。 AndroidFastRenderView類擴展了SurfaceView。我遇到的問題是,雖然我需要SurfaceView來貫穿整個遊戲,但我需要EditText只保留一小會兒,然後基於觸摸事件消失。
我嘗試從我的MainMenuScreen類中調用RelativeLayout.removeView(et),它負責構造發送給SurfaceView的位圖以及偵聽觸摸事件。但是我得到一個未捕獲的異常,說我無法編輯在另一個線程中定義的視圖。
我很抱歉這本小說,但我一直試圖解決這個問題,自己好幾個小時,沒有運氣。我覺得這是一件很簡單的事情,我只是沒有得到。任何幫助深表感謝!
你是說我做的是在我的活動的方法?我需要根據SurfaceView Thread中發生的事件移除該視圖。對不起,我基本上都是超級新手。 – dfitzgerald 2012-07-20 21:54:17
正如我所看到的 renderView = new AndroidFastRenderView(this,frameBuffer); 您可以從視圖訪問活動,因此可能很容易在Surfaceview線上調用該功能。 (類似於Activity.runOnUiThread ...)。 您也可以在Activity類中創建一個完整的函數,並從SurfaceView線程中調用該func。 希望我解釋正確:) – charlypu 2012-07-20 21:58:37