В любой игре есть меню, из которого вы уже попадаете на игровой экран. В общем-то различных экранов может быть много. Можно, конечно, полностью перерисовывать всё, когда необходимо переключение между экранами. В 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; } ... }
Довольно просто и удобно. Не обязательно создавать экземпляры всех экранов, можно только один. А уже при переключении создавать экземпляр того экрана, куда хотим перейти. Я лично считаю, что лучше подгрузить всё сразу при запуске игры, чтобы потом при переключении между экранами юзеру не пришлось ждать (: