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
}

在您的问题中,您使用了两种尺寸,一种基于屏幕分辨率,另一种基于虚拟宽度和高度。您将只使用一个,它会传递到视口。

这现在应该可以正确缩放您的精灵!

希望这个回答对您有所帮助!如果您还有其他问题,请随时在下方评论!