Android 在具有ScreenViewport的libGDX中,调整大小的行为不正常

Android 在具有ScreenViewport的libGDX中,调整大小的行为不正常,android,libgdx,scene2d,Android,Libgdx,Scene2d,我一直在尝试使用最简单的程序来获得我的分数,并将我的游戏移植到libGDX,但不幸的是,我无法弄清楚到底发生了什么。我想做的是得到一个带有屏幕视口的舞台,并在调整大小后保持蓝色正方形居中。以下是我使用的最基本的代码: 屏幕如下: public class GameScreen implements Screen { private Stage stage; private Tile tile; @Override public void render(float delta) { G

我一直在尝试使用最简单的程序来获得我的分数,并将我的游戏移植到libGDX,但不幸的是,我无法弄清楚到底发生了什么。我想做的是得到一个带有屏幕视口的舞台,并在调整大小后保持蓝色正方形居中。以下是我使用的最基本的代码:

屏幕如下:

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);
}
现在是Tile类:

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();
}
除了
游戏
类和一些存根之外,没有其他代码。我得到了正确的结果,但当我调整大小时,我有时会在屏幕上看到一个扭曲的蓝色矩形,它没有居中。当我调整大小时,它看起来像是将正方形拉伸了一点,然后突然,正方形被正确地重新定位,并再次开始。我已经注意到,所有我尝试过的不同视口都会出现这种情况。他们的行为是他们应该做的,但总有这个阶段,当事情出了一点差错。在蓝色正方形绘制之前,我使用了一种纹理,结果是一样的

我希望有人能看到这一点并向我解释清楚,因为我现在很困惑:)

谢谢

编辑:我在另一台运行约塞米蒂的Mac电脑上进行了尝试,结果很好。这似乎是一个设置问题……我尝试了Java 1.7和1.8,但没有任何区别。

试试这个:

创建专用属性表:

private Table table;
在您的显示方法中:

table = new Table(skin); // if you have skin you add it if not u leave it blanc
将您的标题添加到表中(也在show方法中):

现在将表格添加到舞台,而不是标题

stage.addActor(table);
然后在调整大小的方法中:

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

你的意思是当你调整窗口大小时(在释放鼠标按钮之前)它会变形?你在哪个站台上跑步?通常,当用户调整窗口大小时,只有在用户释放鼠标按钮后,才会调用“调整大小”和“渲染”。@Tenfour04是的,在调整大小期间会发生这种情况,但奇怪的是,当我释放鼠标时,它会停留在“调整大小:拉伸/偏心”期间的样子。另外,在resize函数中调用render似乎也不会使它变得更好。@Tenfour04我忘了提到,我正在MacOSX(约塞米蒂)上运行它。谢谢你的建议,我本来打算尝试一下,但这显然是我机器上的设置问题,因为我的代码在运行相同操作系统的笔记本电脑上运行得很好。
@Override
    public void resize(int width, int height) {
        stage.getViewport().update(width, height);
        table.invalidateHierarchy();
    }