【发布时间】:2020-03-23 12:07:08
【问题描述】:
我正在学习 libgdx 的使用,但我对视口以及对象在屏幕上的排列方式感到困惑。假设我的 2D 世界是 2x2 单位宽和高。现在我创建一个视口为 1x1 的相机。所以我应该看到我世界的 25%。通常显示器不是方形的。所以我希望 libgdx 能够挤压和拉伸这个正方形以适应显示器。
对于横向滚动条,您可以将视口高度设置为与世界高度相同,并根据纵横比调整视口宽度。与显示器的纵横比无关,您始终可以看到整个世界的高度,但在 x 轴上有不同的扩展。显示器宽于高的人可以在 x 轴上比方形显示器的人看得更远。但是比例会保持不变,不会失真。到目前为止,我认为我掌握了视口逻辑的工作原理。
我正在编写“Learning LibGDX Game Development”一书,您在其中开发了“canyon bunny”游戏。源代码可以在这里找到:
在 WorldRenderer 类中,您可以找到相机的初始化:
private void init() {
batch = new SpriteBatch();
camera = new OrthographicCamera(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT);
camera.position.set(0, 0, 0);
camera.update();
}
视口常量保存在单独的常量类中:
public class Constants {
// Visible game world is 5 meters wide
public static final float VIEWPORT_WIDTH = 5.0f;
// Visible game world is 5 meters tall
public static final float VIEWPORT_HEIGHT = 5.0f;
}
如您所见,视口为 5x5。但是游戏对象在我的手机上具有正确的比例(16:9),即使在桌面上,当您更改窗口大小时,游戏也会保持正确的比例。我不明白为什么。我预计游戏会尝试将世界的方形切口绘制到矩形显示器上,这会导致失真。为什么不是这样?为什么不需要调整视口的宽度或高度来适应纵横比?
【问题讨论】:
-
显然 VIEWPORT_WIDTH 的改变根本不会改变游戏的外观。 VIEWPORT_WIDTH = 100 和 VIEWPORT_WIDTH = 1 的游戏看起来相同。对我来说没有意义。 VIEWPORT_HEIGHT 确实改变了外观。
-
这可能会有所帮助:stackoverflow.com/q/40059360/506796