libgdx: переключение между экранами

В любой игре есть меню, из которого вы уже попадаете на игровой экран. В общем-то различных экранов может быть много. Можно, конечно, полностью перерисовывать всё, когда необходимо переключение между экранами. В libgdx всё намного проще оказалось.

В обычном приложении под Android переключение между активностями довольно просто:

Intent intent = new Intent(); intent.setClass(this, MyActivity.class); startActivity(intent); 

Я первоначально и хотел что-то подобное и для игры сделать. Для каждого экрана своё Activity. А потом уже переключаться между ними. Оказалось, что всё куда проще. Activity у меня всего одно:

public class MainActivity extends AndroidApplication {  @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;  }  ...}

Довольно просто и удобно. Не обязательно создавать экземпляры всех экранов, можно только один. А уже при переключении создавать экземпляр того экрана, куда хотим перейти. Я лично считаю, что лучше подгрузить всё сразу при запуске игры, чтобы потом при переключении между экранами юзеру не пришлось ждать (:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *