Libgdx 精灵不随视口缩放
Libgdx sprite not scalling with viewport
我有一个拉伸视口,每次重新调整屏幕时我都会更新它:
viewport.update(x, y, true);
我用 photoshop 画了一个背景,然后我删除了对象并将它们放在一个单独的文件中,所以我的意思是对象与原点的大小正确,因为我将它们与原始背景分开并对它们进行纹理包装。
我发现,如果我绘制此对象(使用 Sprite),我必须将每个精灵的比例设置为 2.25,否则精灵会更小,而且我不知道我做错了什么,因为我使用的是单个精灵camera/viewport,单个批次并调用 batch.setProjectionMatrix(camera.combined).
我做错了什么?
这就是我创建视口和相机的方式:
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();
您没有正确使用相机和视口。
相机有自己的 "view width" 和 "view height",您实际上是在 setToOrtho
方法中指定的。但是,当您使用视口时,您不需要为相机设置这些东西。
而是将这些尺寸参数与正交相机一起提供给视口构造函数。
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.update(x, y, true);
我用 photoshop 画了一个背景,然后我删除了对象并将它们放在一个单独的文件中,所以我的意思是对象与原点的大小正确,因为我将它们与原始背景分开并对它们进行纹理包装。
我发现,如果我绘制此对象(使用 Sprite),我必须将每个精灵的比例设置为 2.25,否则精灵会更小,而且我不知道我做错了什么,因为我使用的是单个精灵camera/viewport,单个批次并调用 batch.setProjectionMatrix(camera.combined).
我做错了什么?
这就是我创建视口和相机的方式:
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();
您没有正确使用相机和视口。
相机有自己的 "view width" 和 "view height",您实际上是在 setToOrtho
方法中指定的。但是,当您使用视口时,您不需要为相机设置这些东西。
而是将这些尺寸参数与正交相机一起提供给视口构造函数。
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
}
在您的问题中,您使用了两种尺寸,一种基于屏幕分辨率,另一种基于虚拟宽度和高度。您将只使用一个,它会传递到视口。
这现在应该可以正确缩放您的精灵!
希望这个回答对您有所帮助!如果您还有其他问题,请随时在下方评论!