Камера Libgdx и окно просмотра - PullRequest
0 голосов
/ 07 сентября 2018

Давно поигрался с 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)

...