2016-01-13 3 views
0

Я пытаюсь получить простейшую программу для получения моих оценок и портировать мою игру в 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, и это не имеет никакого значения.

+0

Вы имеете в виду, что это искажения при изменении размеров окна (перед тем как отпустить кнопку мыши)? На какой платформе вы работаете? Обычно изменение размера и рендеринга не вызывается при изменении размера окна пользователем, только после того, как пользователь отпускает кнопку мыши. – Tenfour04

+0

@ Tenfour04 Да, это происходит во время изменения размера, но странно то, что когда я отпускаю мышь, он зацикливается на том, как это выглядело во время изменения размера: растянутое/offcentered. Кроме того, вызов рендеринга в функции изменения размера не улучшает его. – Rippalka

+0

@ Tenfour04 Я забыл упомянуть, я запускаю это на MacOSX (Yosemite). – Rippalka

ответ

0

Попробуйте это:

создать частный атр таблицу:

private Table table; 

в вашем шоу метода:

table = new Table(skin); // if you have skin you add it if not u leave it blanc 

добавить вам заголовок таблицы (в методе шоу также):

table.add(title) // here you can position your title where ever you want using table layout 
table.add(title).colspan(3).expandX().spaceBottom(50).row(); // exemple 

теперь добавить таблицу в вашей сцене вместо названия

stage.addActor(table); 

затем в методе изменения размера:

@Override 
    public void resize(int width, int height) { 
     stage.getViewport().update(width, height); 
     table.invalidateHierarchy(); 
    } 
+0

Спасибо за предложение, я собирался попробовать его, но это, по-видимому, проблема с установкой на моей машине, так как мой код отлично работает на моем ноутбуке с той же ОС. – Rippalka

 Смежные вопросы

  • Нет связанных вопросов^_^