Отрисовка счета в игре Flappy Bird на Java (libGDX)

324
07 сентября 2021, 22:30

Игра Flappy Bird на Java с libGDX

Хочу вывести на экран подсчет очков

    package com.mygdx.game;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.g2d.SpriteBatch;
    import com.badlogic.gdx.math.Vector2;
    public class Background {
        private BGPicture[] backs;
        private int speed;
        public Background() {
            speed = 4;
            backs = new BGPicture[2];
            backs[0] = new BGPicture(new Vector2(0, 0));
            backs[1] = new BGPicture(new Vector2(800, 0));
        }
        public void render(SpriteBatch batch) {
            for (int i = 0; i < backs.length; i++) {
                batch.draw(backs[i].tx, backs[i].pos.x, backs[i].pos.y);
            }
        }
        public void update() {
            for (int i = 0; i < backs.length; i++) {
                backs[i].pos.x -= speed;
            }
            if (backs[0].pos.x < -800) {
                backs[0].pos.x = 0;
                backs[1].pos.x = 800;
            }
        }
        class BGPicture {
            private Texture tx;
            private Vector2 pos;
            public BGPicture(Vector2 pos) {
                tx = new Texture("back.png");
                this.pos = pos;
            }
        }
    }

package com.mygdx.game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
public class Bird {
    Texture img;
    Vector2 position;
    float vy;
    float gravity;
    public Bird() {
        img = new Texture("bird1.png");
        position = new Vector2(100, 380);
        vy = 0;
        gravity = -0.7f;
    }
    public void render(SpriteBatch batch) {
        batch.draw(img, position.x, position.y);
    }
    public void update() {
        if (Gdx.input.isKeyPressed(Input.Keys.SPACE)){
            vy = 10;
        }
        vy += gravity;
        position.y += vy;
    }
    public void recreate(){
        position = new Vector2(100, 380);
        vy = 0;
    }
}

package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    Background bg;
    Bird bird;
    Obstackles obstackles;
    boolean gameOver;
    Texture restartTexture;
    Score score;
    int count = 0;
    @Override
    public void create() {
        batch = new SpriteBatch();
        bg = new Background();
        bird = new Bird();
        obstackles = new Obstackles();
        gameOver = false;
        restartTexture = new Texture("RestartBtn.png");
        score = new Score();
    }

    @Override
    public void render() {
        update();
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        bg.render(batch);
        obstackles.render(batch);
        if (!gameOver) {
            bird.render(batch);
        } else {
            batch.draw(restartTexture, 200, 200);
        }
        score.render(batch);
        batch.end();
    }
    public int getCount() {
        return count;
    }
    public void update() {
        bg.update();
        bird.update();
        obstackles.update();
        for (int i = 0; i < Obstackles.obs.length; i++) {
            if (bird.position.x > Obstackles.obs[i].position.x && bird.position.x < Obstackles.obs[i].position.x + 50) {
                if (!Obstackles.obs[i].emptySpace.contains(bird.position)) {
                    gameOver = true;
                    count++;
                }
            }
        }
        score.update();
        if (bird.position.y < 0 || bird.position.y > 600) {
            gameOver = true;
        }
        if (Gdx.input.isKeyPressed(Input.Keys.SPACE) && gameOver) {
            recreate();
        }
    }
    @Override
    public void dispose() {
        batch.dispose();
    }
    public void recreate() {
        bird.recreate();
        obstackles.recreate();
        gameOver = false;
    }
}
package com.mygdx.game;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import java.util.Random;
public class Obstackles {
    static WallPair[] obs;
    Texture txt;
    int betweenDistance;
    public Obstackles() {
        txt = new Texture("wall.png");
        obs = new WallPair[4];
        betweenDistance = 300;
        int startPosX = 400;
        for (int i = 0; i < obs.length; i++) {
            obs[i] = new WallPair(new Vector2(startPosX, 0));
            startPosX += 220;
        }
    }
    public void render(SpriteBatch batch) {
        for (int i = 0; i < obs.length; i++) {
            batch.draw(txt, obs[i].position.x, obs[i].position.y);
            batch.draw(txt, obs[i].position.x, obs[i].position.y + betweenDistance + txt.getHeight() - obs[i].offset);
        }
    }
    public void update() {
        for (int i = 0; i < obs.length; i++) {
            obs[i].update();
        }
    }
    public void recreate() {
        int startPosX = 400;
        for (int i = 0; i < obs.length; i++) {
            obs[i] = new WallPair(new Vector2(startPosX, 0));
            startPosX += 220;
        }
    }
    class WallPair {
        Vector2 position;
        float speed;
        int offset;
        Rectangle emptySpace;
        public WallPair(Vector2 pos) {
            position = pos;
            speed = 2;
            offset = new Random().nextInt(250);
            emptySpace = new Rectangle(position.x, position.y - offset + 300, 50, betweenDistance);
        }
        public void update() {
            position.x -= speed;
            if (position.x < -50) {
                position.x = 800;
                offset = new Random().nextInt(250);
            }
            emptySpace.x = position.x;
        }
    }
}

Я добавил вот такой код и он должен отображать на экран счет после перехода через блоки. Проблема с отображением картинки счета.

package com.mygdx.game;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
public class Score {
    private Texture txScore;
    private Vector2 pos;
    MyGdxGame myGdxGame;
    Score() {
        txScore = new Texture("0.gif");
        pos = new Vector2(100, 200);
    }
    public void render(SpriteBatch batch) {
        batch.draw(txScore, 100, 200);
        if (myGdxGame.getCount() > 0)
            batch.draw(getTexture(myGdxGame.getCount()), my, 200);
    }
    public void update() {
        int count = myGdxGame.getCount();
    }
    public Texture getTexture(int textureNumber) {
        return new Texture(textureNumber, 100,200);
    }
}
READ ALSO
Optional&lt;T&gt; в List&lt;T&gt;

Optional<T> в List<T>

Java 8Можно ли преобразовать Optional в List?

114
Объединение многоугольников в один

Объединение многоугольников в один

Есть два многоугольника заданных массивами с координатамиНужно как-то объединить их в один многоугольник и получить на выходе новый массив...

99
Как получить текст вместо ссылки android.content.res.Resourses$Theme@e87d8e

Как получить текст вместо ссылки android.content.res.Resourses$Theme@e87d8e

Я записываю данные из EditText в словарь, обрабатываю с помощью JSON и сохраняю в файл

289
Джава. Метод для выделения группы объектов по признаку

Джава. Метод для выделения группы объектов по признаку

Я чайникЕсть массив объектов, как выделить из массива объекты, которые имеют общий признак (поле)? (например, человек - объект имеющий поля...

106