В любой игре есть меню, из которого вы уже попадаете на игровой экран. В общем-то различных экранов может быть много. Можно, конечно, полностью перерисовывать всё, когда необходимо переключение между экранами. В libgdx всё намного проще оказалось.
В обычном приложении под Android переключение между активностями довольно просто:
Intent intent = new Intent(); intent.setClass(this, MyActivity.class); startActivity(intent);
Я первоначально и хотел что-то подобное и для игры сделать. Для каждого экрана своё Activity. А потом уже переключаться между ними. Оказалось, что всё куда проще. Activity у меня всего одно:
public class MainActivity extends AndroidApplication {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.useAccelerometer = false;
config.useCompass = false;
config.useWakelock = true;
config.useGL20 = true;
initialize(new BomberMan(), config);
}
}
Как видно, в нём создаётся экземпляр BomberMan, который наследуется от класса Game:
public class BomberMan extends Game {
public StageScreen stage;
public GameScreen game;
@Override
public void create() {
stage = new StageScreen(this);
game = new GameScreen(this);
setScreen(stage);
}
...
}
Класс содержит ссылки на все доступные экраны. В случае необходимости можно переключится. GameScreen и StageScreen реализуют интерфейсы класса Screen. Как пример, при клике хотим переключить экран:
public class StageScreen implements Screen, InputProcessor {
BomberMan game;
//в конструктор передаём ссылку на BomberMan
public StageScreen(BomberMan game){
this.game = game;
}
//при нажатии на тач
@Override
public boolean touchDown(int x, int y, int pointer, int button) {
//меняем экран
game.setScreen(game.game);
return true;
}
...
}
Довольно просто и удобно. Не обязательно создавать экземпляры всех экранов, можно только один. А уже при переключении создавать экземпляр того экрана, куда хотим перейти. Я лично считаю, что лучше подгрузить всё сразу при запуске игры, чтобы потом при переключении между экранами юзеру не пришлось ждать (: