Libgdx精灵没有用视口进行scalling

时间:2017-10-31 07:25:26

标签: libgdx sprite projection spritebatch

我有一个拉伸视口,每当屏幕重新调整时我都会更新:

viewport.update(x, y, true);

我用photoshop绘制了一个背景然后我删除了这些对象并将它们放在一个单独的文件中,所以我的意思是这些对象的原始尺寸正确,因为我将它们从原始背景和纹理包中分离出来它们。

我发现如果我绘制这个对象(使用Sprite),我必须将每个精灵的比例设置为2.25,否则精灵会更小,我不知道我做错了什么因为我使用单个相机/视口,单个批处理并调用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();

1 个答案:

答案 0 :(得分:2)

您没有正确使用相机和视口。

相机有自己的"视图宽度"和"查看身高"您在setToOrtho方法中实际指定的。但是,在使用视口时,不需要将这些内容设置为相机。

而是将这些尺寸参数与正交相机一起提供给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
}

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

现在应该正确缩放你的精灵!

我希望这个答案有所帮助!如果您还有其他问题,请随时在下面发表评论!