正确覆盖onStop()和onRestart()调用,但不会执行以下代码

时间:2019-04-04 23:37:50

标签: java android android-activity

我目前正在Android Studio中开发一款结合Java和Android的游戏。

我的问题:当我关闭该应用程序时,请等待几秒钟并返回到该应用程序,它仍在后台运行。 这会导致游戏对象继续移动,从而明显导致游戏结束。

我在游戏中实现了“暂停”功能/方法,可以通过“暂停”按钮进行访问,但是在我关闭应用程序时也应该调用它。 这应该在我关闭应用程序时暂停游戏,而在我返回应用程序时暂停。

我还实现了“恢复”功能/方法以退出暂停屏幕,当我重新进入应用程序时也应调用该功​​能/方法。

当我的活动激发onStop()和onRestart()方法时,方法“ public void pause()”和“ public void resume()”都被正确调用,但是通过暂停调用时,它们不执行通常的操作按钮。

我用一个简单的System.out.println(“”);进行了测试。 这表明我关闭或重新进入应用程序时会调用我的pause()和resume()方法。但是他们实际上并没有做背后的逻辑(暂停游戏)

我的MainActivity类

public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

scene = new GameplayScene();

@Override
    protected void onStop() {
        super.onStop();
        scene.pause(); //
        System.out.println("stopped"); //testing purposes
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        scene.resume();
        System.out.println("restarted"); //testing purposes
    }
}

还有我的GamePlayScene类

public void pause() {
        System.out.println("Pause Method Called");//works
        paused = true;
        timeScale = 0; //this freeze all movement (game pause)

        pauseImg = bf.decodeResource(Constants.CURRENT_CONTEXT.getResources(), R.drawable.resumesymbol);
    }

    public void resume() {
        System.out.println("Resume Method Called");
        paused = false;
        timeScale = 1; //this unlocks every movement again (game resume)
        touchable = true;

        pauseImg = bf.decodeResource(Constants.CURRENT_CONTEXT.getResources(), R.drawable.pausesymbol);
    }

正如我所说:每个必要的方法都会正确调用。

I / System.out:调用暂停方法 I / System.out:已停止

I / System.out:调用恢复方法 I / System.out:重新启动

为什么它实际上不暂停游戏,而是继续移动对象?

编辑:

“我的按钮”只是一个Rect,100x100像素浮动在右上角。 该按钮通过pausebutton.png的位图显示,我检查按钮是否已被以下物体按下:

public void pause(float touchX, float touchY) {
        if (pauseRect.contains((int)touchX,(int) touchY)) {
            paused = true;
            timeScale = 0;

            pauseImg = bf.decodeResource(Constants.CURRENT_CONTEXT.getResources(), R.drawable.resumesymbol);
        }
    }

这是按钮的暂停方法。 该方法由用户在物理按钮上调用-您在上方看到的其他暂停方法应通过关闭应用程序来调用(此方法工作得很好,但是在关闭时,它不会执行该方法中的其他操作)

该方法的详细作用: 将布尔值设置为suspended = true; 设置int timeScale = 0

gameloop总是在我的玩家类的每一帧上调用update(),在此update()方法中,它设置速度* timeScale,导致当timeScale = 0时停止运动。

这一切都可以通过我的暂停按钮正常运行,而不能通过onRestart()

0 个答案:

没有答案