Здравствуйте, давайте создадим простую игру, в которой один предмет сталкивается с другим (2 актёра), есть кнопки и несколько экранов игры: меню, сама игра и конец игры.
Этот пример будет как простой образец кода, который можно исправлять, добавлять к нему свой код и создать игры, HTML5 баннеры и т.п.
Перед тем как приступить к созданию игры вам стоит позаботиться о безопасности своего компьютера – вот здесь можно скачать отличный .
Первым делом запускаем LibGDX и задаём следующие параметры:
Главное здесь, для реализации приведённого ниже кода:
Package (оставляем по умолчанию): com.mygdx.game
Game сlass (изменяем на следующий): MainGame
Галочки ставим на пунктах: Desktop, Android, HTML (если нужен будет HTML5 для сайта например), можно также поставить галочку напротив пункта Box2D (но в данном примере он применяться не будет, создание игра на основе Box2D буду писать в следующих статьях).
Жмем Generate, заходим в Android Studio и импортируем проекта – более подробно об этом читайте в моей предыдущей статье (пункт 1 и 2) –
А теперь приступим к созданию игры непосредственно в программе Android Studio:
Создадим основной экран игры, где будут сталкиваться 2 предмета:
Для игры нам понадобятся следующие изображения:
Скачать их можно здесь:
– скачать minijoe.png
– скачать pinchos.png
Помещаем их в папку assets, которая находится в папке Android:
Чтобы открыть папку assets из самой программы Android Studio достаточно кликнуть по ней правой кнопкой мышки и выбрать пункт File Path, а затем выбрать assets:
Далее переходим к написанию кода игры, создадим 5 файлов: MainGame, MainGameScreen, BaseScreen, ActorJugador, ActorPinchos.
Для этого заходим в папку Core, в ней выбираем папку java и подпапку com.mygdx.game в ней уже будет лежать файл MainGame.
Заменяем код файл MainGame на следующий:
package com.mygdx.game; import com.badlogic.gdx.Game; public class MainGame extends Game { @Override public void create () { setScreen(new MainGameScreen(this)); } }
Далее создаем файл MainGameScreen для этого наводим курсор мышки на папку com.mygdx.game, кликаем правой кнопкой мышки и выбираем New и Java Class:
И создаем новый файл с именем MainGameScreen:
Вставляем в файл MainGameScreen следующий код:
package com.mygdx.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Stage; import com.mygdx.game.actors.ActorJugador; import com.mygdx.game.actors.ActorPinchos; public class MainGameScreen extends BaseScreen { public MainGameScreen (MainGame game) { super(game); texturaJugator=new Texture("minijoe.png"); texturaPinchos=new Texture("pinchos.png"); regionPinchos=new TextureRegion(texturaPinchos, 0, 64, 128, 64); } private Stage stage; private ActorJugador jugador; private ActorPinchos pinchos; private Texture texturaJugator, texturaPinchos; private TextureRegion regionPinchos; @Override public void show() { stage = new Stage(); jugador = new ActorJugador(texturaJugator); pinchos=new ActorPinchos(regionPinchos); stage.addActor(jugador); stage.addActor(pinchos); jugador.setPosition(20,100); pinchos.setPosition(500,100); } @Override public void hide() { stage.dispose(); } @Override public void render(float delta) { Gdx.gl.glClearColor(0.4f, 0.5f, 0.8f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(); comprobarColisiones(); stage.draw(); } private void comprobarColisiones(){ if (jugador.isAlive()&&jugador.getX()+jugador.getWidth()>pinchos.getX()){ System.out.println("Colision"); jugador.setAlive(false); } } @Override public void dispose() { texturaJugator.dispose(); } }
Аналогично создаем файл BaseScreen и вставляем в него следующий код:
package com.mygdx.game; import com.badlogic.gdx.Screen; public abstract class BaseScreen implements Screen { private MainGame game; public BaseScreen(MainGame game) { this.game=game; } @Override public void show() { } @Override public void render(float delta) { } @Override public void resize(int width, int height) { } @Override public void pause() { } @Override public void resume() { } @Override public void hide() { } @Override public void dispose() { } }
У нас получилось три файла: MainGame, MainGameScreen, BaseScreen.
Наверное вы спросите зачем для игры мы создали 3 файла – это нужно, чтобы создать в следующем уроке несколько экранов: экран меню, экран игры и экран конец игры.
А теперь приступим к созданию Актёров, то есть действующих лиц игры – для этого нам нужно создать ещё два файла, которые должны лежать в папке actors:
Далее создаем папки actors – наводим курсор мышки на папку com.mygdx.game, кликаем правой кнопкой мышки и выбираем New и Package:
И вводим имя папки – actors
Далее создаём в ней файл ActorJugador.
Далее создания файла ActorJugador – наводим курсор мышки на папку actors, кликаем правой кнопкой мышки и выбираем New и Java Class:
И вводим имя файла – ActorJugador.
После меняем код файла ActorJugador на следующий:
package com.mygdx.game.actors; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.scenes.scene2d.Actor; public class ActorJugador extends Actor { private Texture jugator; private boolean alive; public boolean isAlive() { return alive; } public void setAlive(boolean alive) { this.alive = alive; } public ActorJugador(Texture jugator){ this.jugator=jugator; this.alive=true; setSize(jugator.getWidth(), jugator.getHeight()); } public void act (float delta){ super.act(delta); } public void draw (Batch batch, float parentAlpha){ batch.draw(jugator, getX(), getY()); } }
Аналогично создаём файл ActorPinchos и меняем его код на следующий:
package com.mygdx.game.actors; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.Actor; public class ActorPinchos extends Actor { private TextureRegion pinchos; public ActorPinchos (TextureRegion pinchos) { this.pinchos=pinchos; setSize(pinchos.getRegionWidth(), pinchos.getRegionHeight()); } public void act (float delta){ setX(getX()-250*delta); } @Override public void draw(Batch batch, float parentAlpha) { batch.draw(pinchos, getX(), getY()); } }
А в следующей части мы создадим дополнительно 2 экрана игры: экран меню и экран Конец Игры с кнопочками перехода между экранами.