Я пытаюсь получить простейшую программу для получения моих оценок и портировать мою игру в libGDX, но, к сожалению, я не могу понять, что происходит. То, что я пытаюсь сделать, это получить сцену с ScreenViewport и сохранить синий квадрат в центре даже после изменения размера. Вот минимальный код, я использую:Изменение размера не ведет себя корректно в libGDX с помощью ScreenViewport
Вот экран:
public class GameScreen implements Screen {
private Stage stage;
private Tile tile;
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
stage.act(delta);
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height, true);
tile.setPosition(width/2 - 25, height/2 - 25);
}
@Override
public void show() {
this.stage = new Stage(new ScreenViewport());
this.tile = new Tile();
tile.setSize(50, 50);
stage.addActor(tile);
Gdx.input.setInputProcessor(this.stage);
}
А теперь класс плитки:
public class Tile extends Actor {
private ShapeRenderer renderer = new ShapeRenderer();
@Override
public void draw(Batch batch, float parentAlpha) {
batch.end();
renderer.setProjectionMatrix(batch.getProjectionMatrix());
renderer.setTransformMatrix(batch.getTransformMatrix());
renderer.translate(getX(), getY(), 0);
renderer.begin(ShapeRenderer.ShapeType.Filled);
renderer.setColor(Color.BLUE);
renderer.rect(0, 0, getWidth(), getHeight());
renderer.end();
batch.begin();
}
Там нет другого кода рядом с Game
класса и несколько окурки. Я получаю правильный результат, но когда я изменяю размер, я иногда приземляюсь на экран с искаженным синим прямоугольником, который не центрирован. Когда я изменяю размер, он выглядит так, что он немного растягивает квадрат, и вдруг квадрат перестраивается правильно, и он начинается снова. Я заметил, что все различные видовые экраны, которые я пробовал. Они ведут себя так, как должны, но всегда есть эта фаза, когда дело идет не так, как надо. Я использовал текстуру перед рисованием синего квадрата, и результат был таким же.
Я надеюсь, что кто-то будет смотреть на это и объяснить мне очевидным, потому что я совершенно запутался в данный момент :)
Благодарности
EDIT: Я попробовал на другой Mac работает Yosemite и там результат в порядке. Кажется, это проблема с настройкой ... Я пробовал Java 1.7 и 1.8, и это не имеет никакого значения.
Вы имеете в виду, что это искажения при изменении размеров окна (перед тем как отпустить кнопку мыши)? На какой платформе вы работаете? Обычно изменение размера и рендеринга не вызывается при изменении размера окна пользователем, только после того, как пользователь отпускает кнопку мыши. – Tenfour04
@ Tenfour04 Да, это происходит во время изменения размера, но странно то, что когда я отпускаю мышь, он зацикливается на том, как это выглядело во время изменения размера: растянутое/offcentered. Кроме того, вызов рендеринга в функции изменения размера не улучшает его. – Rippalka
@ Tenfour04 Я забыл упомянуть, я запускаю это на MacOSX (Yosemite). – Rippalka