Libgdx Sprite 不随视口(viewport)缩放

标签 libgdx sprite projection spritebatch

我有一个拉伸(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/

相关文章:

LIBGDX如何加载md2格式

python - pygame:图像和 Sprite 有什么区别?

opencv - cv2.projectPoints 实际上是如何工作的?

java - 使用条件和/或投影(子查询)将 SQL 转换为 Hibernate 查询

java - 使用最新的 BaseGameUtils 的 Google Play 游戏服务 LibGDX 项目设置

java - 我是否可以在不了解 Android 操作系统组件的情况下仅使用 LIBGDX 开发 Android 应用程序?

android - 高 Assets 加载时间

html - css Sprite 不显示

c# - Sprite 定位

java - 将 3D 点投影到 2D 屏幕坐标