создаем 2D игру в Android Studio LibGDX

Android Studio и LibGDX: Создаем простую 2D игру (Часть 1)

Здравствуйте, давайте создадим простую игру, в которой один предмет сталкивается с другим (2 актёра), есть кнопки и несколько экранов игры: меню, сама игра и конец игры.

Этот пример будет как простой образец кода, который можно исправлять, добавлять к нему свой код и создать игры, HTML5 баннеры и т.п.

Перед тем как приступить к созданию игры вам стоит позаботиться о безопасности своего компьютера — вот здесь можно скачать отличный антивирус — Аваст для Windows 10.

Первым делом запускаем LibGDX и задаём следующие параметры:

2dlibgdx14

Главное здесь, для реализации приведённого ниже кода:
Package (оставляем по умолчанию): com.mygdx.game
Game сlass (изменяем на следующий): MainGame
Галочки ставим на пунктах: Desktop, Android, HTML (если нужен будет HTML5 для сайта например), можно также поставить галочку напротив пункта Box2D (но в данном примере он применяться не будет, создание игра на основе Box2D буду писать в следующих статьях).

Жмем Generate, заходим в Android Studio и импортируем проекта — более подробно об этом читайте в моей предыдущей статье (пункт 1 и 2) —

А теперь приступим к созданию игры непосредственно в программе Android Studio:

Создадим основной экран игры, где будут сталкиваться 2 предмета:

2dlibgdx5

Для игры нам понадобятся следующие изображения:

minijoe.png
minijoe

pinchos.png
pinchos

Скачать их можно здесь:
— скачать minijoe.png
— скачать pinchos.png

Помещаем их в папку assets, которая находится в папке Android:

2dlibgdx4

Чтобы открыть папку assets из самой программы Android Studio достаточно кликнуть по ней правой кнопкой мышки и выбрать пункт File Path, а затем выбрать assets:

2dlibgdx6

Далее переходим к написанию кода игры, создадим 5 файлов: MainGame, MainGameScreen, BaseScreen, ActorJugador, ActorPinchos.

2dlibgdx7

Для этого заходим в папку Core, в ней выбираем папку java и подпапку com.mygdx.game в ней уже будет лежать файл MainGame.

2dlibgdx8

Заменяем код файл 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:

2dlibgdx9

И создаем новый файл с именем MainGameScreen:

2dlibgdx10

Вставляем в файл 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:

2dlibgdx11

Далее создаем папки actors — наводим курсор мышки на папку com.mygdx.game, кликаем правой кнопкой мышки и выбираем New и Package:

2dlibgdx12

И вводим имя папки — actors

Далее создаём в ней файл ActorJugador.

Далее создания файла ActorJugador — наводим курсор мышки на папку actors, кликаем правой кнопкой мышки и выбираем New и Java Class:

2dlibgdx13

И вводим имя файла — 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 экрана игры: экран меню и экран Конец Игры с кнопочками перехода между экранами.