0

我正在尝试创建一个基于 2D 游戏框架的简单游戏,如 Mario Zechner 的 2011 Apress 书籍“开始 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 的位图以及监听触摸事件。但是我得到一个未捕获的异常,说我无法编辑在另一个线程中定义的视图。

我很抱歉这本小说,但我已经尝试自己解决这个问题好几个小时了,但没有运气。我觉得这是一件非常简单的事情,我只是没有得到。任何帮助深表感谢!

4

1 回答 1

0

嗯...我认为只有 UI Thread 可以添加和删除视图。尝试像这样调用线程:

runOnUiThread(new Runnable(){
    public void run() {
        /* STUFF To do in Thread */
        //Delete the view...
        rl.removeView(et);
}});

希望能帮助到你 :)

于 2012-07-20T21:45:20.607 回答