视口
为了支持多种分辨率和宽高比,Libgdx 使用了所谓的 Viewports
。
有几种类型的 Viewports
使用不同的策略来处理多种分辨率和宽高比。
一个 Viewport
使用了引擎盖下的 Camera
并管理它的 viewportHeight
和 viewportWidth
。你可以选择在其构造函数中为 Viewport
提供 Camera
,否则默认情况下将使用 OrthographicCamera
:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
此外,你必须将 worldWidth
和 worldHeight
指定给视口的构造函数。此空间将表示将用于指定要绘制的对象位置和大小的虚拟坐标系。例如,可以应用于 SpriteBatch 的视口转换将自动处理将逻辑坐标转换为实际屏幕坐标,其方式符合你正在使用的视口的实际类型。例如,当使用正投影(OrthographicCamera
,这是默认设置)时:如果你的世界尺寸为 12.8 x 7.8 米且设备屏幕为 2560x1560 像素,那么你的世界将以每米 200 像素动态投影。
当 Viewport
s 尺寸发生变化时(例如,如果智能手机的屏幕方向正在改变),你需要通知 Viewport
该更改。然后它将自动更新 Camera
s viewportHeight
和 viewportWidth
:
public void resize(int width, int height) {
viewport.update(width, height);
}
Viewport
s 还管理 OpenGL Viewport
并根据需要修改可绘制区域。
Viewport
s 还关注将屏幕坐标转换为游戏坐标,这对于拾取尤其需要:
private Vector2 worldPos = new Vector2();
public boolean touchDown (int x, int y, int pointer, int button) {
worldPos.set(x, y);
viewport.unproject(worldPos);
processPicking(worldPos);
}