【发布时间】:2015-06-21 09:27:53
【问题描述】:
我绞尽脑汁想弄清楚这里发生了什么...我正在使用 FitViewport,它在我调整屏幕大小时工作得很好,但是当它在构造函数中首次创建时它不适合自己像它应该的那样进入屏幕(就像我调整大小时一样)。
这是我的构造函数和 resize() 方法的代码:
public class UpgradesScreen implements Screen {
private ScreenHandler sh;
private OrthographicCamera cam;
private Viewport viewport;
public UpgradesScreen(ScreenHandler sh) {
Gdx.app.log("UpgradesScreen", "Attached");
this.sh = sh;
cam = new OrthographicCamera();
cam.setToOrtho(true, sh.V_WIDTH, sh.V_HEIGHT);
viewport = new FitViewport(sh.V_WIDTH, sh.V_HEIGHT, cam);
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
@Override
public void resize(int width, int height) {
Gdx.app.log("UpgradesScreen", "resizing");
viewport.update((int) width, (int) height);
}
我已经检查以确保 Gdx.graphics.getWidth() 给出的数字与我调整屏幕大小时 resize() 方法接收到的 'width' 参数相同(同样使用 'height' 值)。
据我所知,视口在构造函数期间的行为应该与我调整大小时的行为完全相同。那么为什么它很固执,不更新以适应呢?
这是我调整大小后的样子:
...这是第一次创建屏幕时的样子,在手动调整窗口大小之前:
【问题讨论】:
-
注意:我尝试添加 viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());插入 show() 方法以防万一……没有任何区别。
-
你能显示你的绘图代码吗?
-
它相当广泛,但并不真正相关。它只是在 960 和 600 的虚拟宽度和高度内使用标准坐标,当调整窗口大小时,FitViewport 会完美地呈现它。问题只是 FitViewport 在首次创建时没有被更新或应用,所以我需要弄清楚为什么以及如何让它这样做。
标签: java libgdx viewport window-resize