После знакомства 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: создаем игровой экран и добавляем птицу >>