我想了解viewports
在Libgdx
中的使用情况我有变量V_WIDTH = 800
和V_HEIGHT = (V_WIDTH / (4f/3f))
所以V_HEIGHT = 600
。这是我初始化和更新视口的方式:
// init viewport (in the constructor):
viewport = new FitViewport(NoThanksClient.V_WIDTH, NoThanksClient.V_HEIGHT);
// in the resize method:
viewport.update(width,height, true);
我有一个绿色矩形的纹理,我试图在左上角绘制它。这就是我做的方式:
batch.draw(
frameTexture,
0,
viewport.getScreenHeight() - FRAME_TEXTURE_HEIGHT,
FRAME_TEXTURE_WIDTH,
FRAME_TEXTURE_HEIGHT);
并且一切顺利。但是当我调整屏幕大小时,纹理(frameTexture
)从屏幕上移出或进入。为什么它不在角落?我该怎么做才能让它留下来?
答案 0 :(得分:1)
嗯,你的视口也需要一个摄像头。相机是将游戏显示在屏幕上的内容。视口是管理相机大小的内容。在使用批处理绘图时,您需要将批处理链接到该摄像机。这是您应该初始化视口的方式:
private Camera camera;
private Viewport viewport;
public void create() {
camera = new OrthographicCamera();
viewport = new FitViewport(NoThanksClient.V_WIDTH, NoThanksClient.V_HEIGHT, camera);
}
这将视口将操作的相机设置为OrthographicCamera。您也可以使用任何子类摄像头。
您的调整大小方法很好,您只需在绘制之前再向渲染方法添加一行。
batch.setProjectionMatrix(camera.combined);
batch.draw(
frameTexture,
0,
viewport.getScreenHeight() - FRAME_TEXTURE_HEIGHT,
FRAME_TEXTURE_WIDTH,
FRAME_TEXTURE_HEIGHT);
设置投影矩阵将确保批量绘制到该摄像机,从而通过您创建的视口。我希望这有帮助,如果您有任何疑问,请告诉我。您可以找到有关查看端口here的更多信息。