Игра 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);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть два многоугольника заданных массивами с координатамиНужно как-то объединить их в один многоугольник и получить на выходе новый массив...
Я записываю данные из EditText в словарь, обрабатываю с помощью JSON и сохраняю в файл
Я чайникЕсть массив объектов, как выделить из массива объекты, которые имеют общий признак (поле)? (например, человек - объект имеющий поля...