如何根据屏幕分辨率缩放 libgdx 中的精灵?

Posted

技术标签:

【中文标题】如何根据屏幕分辨率缩放 libgdx 中的精灵?【英文标题】:How to scale sprites in libgdx according to screen resolutions? 【发布时间】:2016-04-02 12:29:34 【问题描述】:

我正在尝试缩放纹理以适应屏幕宽度。这是我尝试过的,但它只是重复纹理。它不会缩放它。

在init方法中:

TextureLoader.TextureParameter param = new TextureLoader.TextureParameter();
param.minFilter = Texture.TextureFilter.MipMapLinearLinear;
param.genMipMaps = true;
param.wrapU = Texture.TextureWrap.ClampToEdge;
param.wrapV = Texture.TextureWrap.ClampToEdge;
manager.load("textures/texture.png", Texture.class, param);

在渲染方法中:

Texture tex = manager.get("textures/texture.png", Texture.class);
float scale = (float)( (float)Gdx.graphics.getWidth() / (float)(tex.getWidth()));

batch.begin();
Sprite s = new Sprite(tex, 0,0,tex.getWidth(),tex.getHeight());

s.setPosition(0, 0);
s.setOriginCenter();
//s.setScale(scale);
s.setSize(Gdx.graphics.getWidth(), scale * tex.getHeight());
s.setOrigin(0,0);
s.draw(batch);
batch.end();

有人知道我做错了什么吗?

【问题讨论】:

看起来您使用的是虚构的“像素”单位,请阅读:blog.xoppa.com/pixels 为什么这么复杂? 什么是复杂的? 好吧,我需要创建一个单独的相机或视口吗?为什么 libgdx 中没有像 setScale() 这样的简单函数?我的意思是,3D 对象只是按我想要的方式缩放,但 2D 似乎让它变得臃肿。我也觉得这篇文章很难理解。 @Z0q camera 和/或 Viewports 并不复杂。一旦你理解了它们,它们可以使许多事情变得容易得多。您必须始终记住的一件事:您不想使用像素。设备有不同的分辨率,你真的不希望有一个依赖分辨率的游戏,尤其是当你为安卓设备开发时!所以阅读camera/viewport 教程,你会看到它的优势 【参考方案1】:

显然这是因为我使用了 mipmap。如果没有 mipmapping,精灵会适当地缩放。 罢工>

param.minFilter = Texture.TextureFilter.MipMapLinearLinear;
param.genMipMaps = true;

【讨论】:

以上是关于如何根据屏幕分辨率缩放 libgdx 中的精灵?的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx - 如何加载一个巨大的精灵表,使其不呈现黑色?

SpriteKit Sprite 无法正确缩放

在 iOS 中显示全屏视频的视频分辨率

如何根据缩放、分辨率和窗口大小正确缩放网页?

(Java LibGDX) 如何在 LibGDX 中调整纹理的大小?

缩放 html 以根据屏幕分辨率按比例调整大小