Давно поигрался с libgdx.Теперь у меня есть небольшая проблема.Мне нужна моя камера, чтобы следить за моим игроком.Делали это раньше, но сейчас я просто не могу заставить его работать.
public class HungerGames extends ApplicationAdapter implements Screen, InputProcessor {
SpriteBatch batch;
Texture img, background;
Player player;
OrthographicCamera camera;
Viewport viewport;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture(Gdx.files.internal("player.png"));
background = new Texture(Gdx.files.internal("background.jpg"));
player = new Player(new Vector2(0,0), 100, img);
camera = new OrthographicCamera();
camera.setToOrtho(false);
viewport = new ExtendViewport(800,600, camera);
viewport.apply();
Gdx.input.setInputProcessor(this);
}
@Override
public void render () {
Gdx.gl.glClearColor(0,0,0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
updateControls();
camera.position.set(player.getPosition().x, player.getPosition().y, 0);
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(background, 0,0);
batch.draw(player.getSprite(), player.getPosition().x, player.getPosition().y);
batch.end();
System.out.println(camera.position + " " + player.getPosition());
}
так вот код, который имеет значение.Если я установлю batch.setProjectionMatrix (camera.combined);, весь экран черный.Если я раскомментирую это, фон и игрок будут визуализироваться, но камера не будет следовать за игроком.Также вот класс Entity, от которого унаследован Player:
public class Entity{
Vector2 position;
float health;
Texture sprite;
SpriteBatch batch;
public Entity(Vector2 position, float health, Texture sprite) {
this.position = position;
this.health = health;
this.sprite = sprite;
}
public Vector2 getPosition() {
return position;
}
public void setPosition(Vector2 position) {
this.position = position;
}
public Texture getSprite() {
return sprite;
}
public void setSprite(Texture sprite) {
this.sprite = sprite;
}
public float getHealth() {
return health;
}
public void setHealth(float health) {
this.health = health;
}
public void moveX(float amount) {
this.position.x = this.position.x + amount;
}
public void moveY(float amount) {
this.position.y = this.position.y + amount;
}
public void update(float delta) {
}
}
Я что-то упустил здесь тривиально?Я гуглил и гуглял, но теперь я действительно не понимаю, что не так.Хорошо, заранее спасибо:)
ps
Я также использую координаты кулачка и координаты игрока, и они одинаковы:
(53.0,51.0,0.0) (53,0,51,0) (53,0,51,0,0,0) (53,0,51,0) (53,0,51,0,0,0) (53,0,51,0) (53,0,51,0,0,0) (53,0,51,0)