我正在努力创建一个基于2D游戏框架的简单游戏,如2011年Apress的书“Mario Zechner的”开始Android游戏“所述。也许这有帮助,也许它没有,但无论如何:
我整场比赛只有一项活动。所有内容都渲染到位图上,然后发送到SurfaceView,发送到SurfaceView的内容将根据游戏的屏幕进行更改。
我想实现一个简单的高分系统,让用户在主菜单屏幕上输入他们的名字到EditView。我已经能够将SurfaceView和EditView与RelativeLayout结合使用,但问题是一旦用户移过主菜单屏幕就摆脱了EditView。
本课程还有很多内容,但这里有一个我认为重要的内容:
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的位图以及侦听触摸事件。但是我得到了一个未被捕获的异常,它说我无法编辑一个线程中定义的视图。
我很抱歉这部小说,但我一直在努力解决这个问题几个小时没有运气。我觉得这是一个非常简单的事情,我只是没有得到。非常感谢任何帮助!
答案 0 :(得分:0)
嗯......我认为只有UI线程可以添加和删除视图。尝试像这样调用线程:
runOnUiThread(new Runnable(){
public void run() {
/* STUFF To do in Thread */
//Delete the view...
rl.removeView(et);
}});
希望有所帮助:)