方法:在线程内启动一个Activity并使用finish()返回

时间:2011-02-20 23:02:56

标签: android

我在Android上编写游戏。我在调用Surface View类时使用Thread来更新和绘制我的游戏。在更新内部,我想根据游戏是否刚开始进行活动,这将启动我的菜单。

我的线程大部分..

    while (myThreadRun) {
        Canvas c = null;
        try {
            gameTime = System.currentTimeMillis();
            c = myThreadSurfaceHolder.lockCanvas(null);
            synchronized (myThreadSurfaceHolder) {
                // Update Game.
                myThreadSurfaceView.onUpdate();
                // Draw Game.
                myThreadSurfaceView.onDraw(c);

你可以看到我在哪里更新游戏...这里是onUpdate();

protected void onUpdate() {

    // Test if menu needs to be displayed.
    while (thread.getMenu()) {
        // Test if menu activity has been started.
        if (thread.getMenuRunning() == false) {
            Intent menuIntent = new Intent(this.getContext(), MyMenu.class);
            ((Activity) cxt).startActivityForResult(menuIntent, 1);
            thread.setMenuRunning(true);
        }
    }

我正在使用while循环,因为如果我没有使用它,那么线程就会继续。

基本上我只是不知道如何使用线程作为游戏循环来实现我的菜单。在任何地方,我看起来似乎都是最好的做法。

在我的菜单活动中,我只显示菜单布局和几个按钮,当人想要开始游戏时,它使用finish()返回我们玩游戏的线程。

我对此非常陌生,所以任何见解都会有所帮助,

谢谢

1 个答案:

答案 0 :(得分:0)

您的SurfaceView线程应该只关注将游戏的当前状态绘制到SurfaceView。 与渲染有关的任何事情 - 尤其是决定是否运行菜单活动的事情 - 都属于UI线程。

所以不要在你的onUpdate()中做所有的事情...在你的游戏的Activity类中做这件事,以响应按下的Menu按钮或其他东西。您应该暂停GameActivity.onPause()中的渲染线程并在GameActivity.onResume()中恢复它,这样在菜单显示时游戏就不会流失。

(onResume()也是游戏对用户刚刚通过菜单活动做出的更改做出反应的好时机。)