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