我有一个拉伸(stretch)视口(viewport),每次调整屏幕大小时都会更新它:
viewport.update(x, y, true);
我用 Photoshop 绘制了一个背景,然后删除了这些对象并将它们放入一个单独的文件中,所以我的意思是,这些对象的大小与原始大小是正确的,因为我将它们与原始背景和纹理打包分开了他们。
我发现,如果我绘制这个对象(使用 Sprite ),我必须将每个 Sprite 的比例设置为 2.25,否则 Sprite 会更小,而且我不知道我做错了什么,因为我使用单个相机/视口(viewport),单个批处理并调用batch.setProjectionMatrix(camera.combined)。
我做错了什么?
这就是我创建视口(viewport)和相机的方式:
public static Dimension virtualResolution = VirtualResolution.RES_768x432.resolution;
public static Dimension screenResolution = new Dimension(1920, 1080);
camera = new OrthographicCamera();
camera.setToOrtho(false, GameSettings.virtualResolution.getWidth(), GameSettings.virtualResolution.getHeight());
camera.update();
viewport = new StretchViewport(GameSettings.screenResolution.getWidth(), GameSettings.screenResolution.getHeight(), camera);
viewport.apply();
最佳答案
您没有正确使用相机和视口(viewport)。
相机有自己的“ View 宽度”和“ View 高度”,您可以在 setToOrtho
方法中实际指定它们。但是,当您使用视口(viewport)时,不需要为相机设置此类内容。
相反,您将这些尺寸参数与正交相机一起提供给视口(viewport)构造函数。
gamecam = new OrthographicCamera();
gamePort = new StretchViewport(V_WIDTH, V_HEIGHT, gamecam);
gamePort.apply();
gamecam.position.set(new Vector3(100, 100, 0));
在游戏中,除非调整屏幕大小,否则您将始终使用相机。
如果调整屏幕大小,代码将如下所示。
@Override public void resize(int width, int height) {
gamePort.update(width, height); // The third boolean parameter
// centers the camera
}
在您的问题中,您使用了两种尺寸,一种基于屏幕分辨率,另一种基于虚拟宽度和高度。您将只使用一个,并将其传递到视口(viewport)。
现在应该可以正确缩放你的 Sprite 了!
希望这个回答对你有帮助!如果您还有其他疑问,请随时在下面评论!
关于Libgdx Sprite 不随视口(viewport)缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47029925/