LibGDX: Урок 5. Пишем игру Flappy Bird для андроид | Делаем android игры

После знакомства c LibGDX – мультиплатформенным фреймворком для создания игр, давайте попробуем написать клон легендарной игры Flappy Bird. Это будет упрощенная версия знаменитой игры, отражающая основной игровой процесс – птичка на экране, которой нужно пролететь между трубами. От падения или столкновения с препятствием игра завершается и ее нужно начать сначала.
Игра Flappy Bird была написана инди-разработчиком в 2013 году для iOS и Android, а в 2014 стала хитом, принося ее создателю $50000 ежедневно на рекламе. Из-за шквала критики и обвинений в том, что Flappy Bird вызывает зависимость, автор удалил игру Flappy Bird из Play Market и App Store через пару месяцев после достижения пика популярности. С тех пор было создано множество клонов игры Flappy Bird, но не один из них не повторил успех оригинала.
Ссылки:
Скачать графические ресурсы для игры: ссылка
Исходный код проекта под видео:

FlappyDemo.java

package info.fandroid.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

import info.fandroid.game.states.GameStateManager;
import info.fandroid.game.states.MenuState;

public class FlappyDemo extends ApplicationAdapter {
  public static final int WIDTH = 480;
  public static final int HEIGHT = 800;

  public static final String TITLE = "Flappy Demo";

  private GameStateManager gsm;
  private SpriteBatch batch;
  
  @Override
  public void create () {
    batch = new SpriteBatch();
    gsm = new GameStateManager();
    Gdx.gl.glClearColor(1, 0, 0, 1);
    gsm.push(new MenuState(gsm));
  }

  @Override
  public void render () {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    gsm.update(Gdx.graphics.getDeltaTime());
    gsm.render(batch);
  }
}

State.java

package info.fandroid.game.states;

import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector3;


public abstract class State {

    protected OrthographicCamera camera;
    protected Vector3 mouse;
    protected GameStateManager gsm;

    public State(GameStateManager gsm){
        this.gsm = gsm;
        camera = new OrthographicCamera();
        mouse = new Vector3();
    }

    protected abstract void handleInput();
    public abstract void update(float dt);
    public abstract void render(SpriteBatch sb);
    public abstract void dispose();
}

MenuState.java

package info.fandroid.game.states;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

import info.fandroid.game.FlappyDemo;

public class MenuState extends State {

    private Texture background;
    private Texture playBtn;

    public MenuState(GameStateManager gsm) {
        super(gsm);
        background = new Texture("bg.png");
        playBtn = new Texture("playbtn.png");
    }

    @Override
    public void handleInput() {

    }

    @Override
    public void update(float dt) {

    }

    @Override
    public void render(SpriteBatch sb) {
        sb.begin();
        sb.draw(background, 0, 0, FlappyDemo.WIDTH, FlappyDemo.HEIGHT);
        sb.draw(playBtn, (FlappyDemo.WIDTH / 2) - (playBtn.getWidth() / 2), FlappyDemo.HEIGHT / 2);
        sb.end();

    }

    @Override
    public void dispose() {
        background.dispose();
        playBtn.dispose();

    }
}

GameStateManager.java

package info.fandroid.game.states;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;

import java.util.Stack;


public class GameStateManager {

    private Stack<State> states;

    public GameStateManager(){
        states = new Stack<State>();
    }

    public void push(State state){
        states.push(state);
    }

    public void pop(){
        states.pop().dispose();
    }

    public void set(State state){
        states.pop().dispose();
        states.push(state);
    }

    public void update(float dt){
        states.peek().update(dt);
    }

    public void render(SpriteBatch sb){
        states.peek().render(sb);
    }
}

Больше уроков:

Уроки Android Studio: тут
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут

<<LibGDX: Урок 4. Добавляем в игру экран меню и счетчик прогресса

Урок 6. Flappy Bird: создаем игровой экран и добавляем птицу >>

Коментарі: 1
Додати коментар