我目前正在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()