В настоящее время я работаю над игрой в Android Studio, которая сочетает в себе Java и Android.
Моя проблема: Когда я закрываю приложение, подожду несколько секунд и вернусь в приложение, оно все еще работает в фоновом режиме.
Это заставляет игровые объекты продолжать двигаться, что всегда приводит к окончанию игры.
Я реализовал функцию / метод «Пауза» в моей игре, к которой можно получить доступ с помощью кнопки «Пауза», но она также должна вызываться при закрытии приложения.
Это должно приостановить игру, когда я закрою приложение, и приостановиться, когда я вернусь к своему приложению.
Я также реализовал функцию / метод «Возобновить», чтобы выйти из экрана паузы, которая также должна вызываться при повторном входе в приложение.
Оба метода "public void pause ()" и "public void resume ()" вызываются правильно, когда моя деятельность вызывает методы onStop () и onRestart (), но они не делают то, что обычно делают при вызове через паузу кнопка.
Я проверил это с помощью простого 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: перезагрузка
Почему он на самом деле не останавливает игру, а вместо этого продолжает перемещать объекты?
EDIT:
Моя кнопка - это просто прямоугольник размером 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);
}
}
Это метод паузы для кнопки.
Этот метод вызывается пользователем на физической кнопке - другой метод паузы, который вы видите выше, должен вызываться при закрытии приложения (которое прекрасно работает, но в момент закрытия оно не выполняет другие действия внутри метода)
Что метод делает в деталях:
устанавливает логическое значение paused = true;
устанавливает int timeScale = 0
gameloop всегда вызывает update () для каждого кадра моего класса игрока, где в этом методе update () он устанавливает скорость * timeScale, приводящую к остановке движения, когда timeScale = 0.
Все это прекрасно работает с моей кнопкой паузы, но не с onRestart ()