我在绘制和缩放精灵时遇到了问题。
我正在从纹理图集加载我的资产,我用LibGDX纹理打包器gui工具打包没问题。我的纹理图集图像目前看起来像这样。
这些图像应该是按钮,但正如您所看到的,图像非常小,因此当加载精灵时,它们会加载一个34x16像素的精灵。当我在1920x1080的画布上渲染这些按钮时,它们太小了。我使用sprite.scale(int scale)
来缩放精灵,但是当我缩放它们时,它们看起来很模糊。我想要发生的是,当它们被缩放时,每个像素按比例缩放,保持按钮上的像素化效果,而不是来自非常小的纹理的模糊调整大小的图像。我目前使用sprite.render(SpriteBatch batch)
渲染精灵。这是使用atlas.createSprite(String name)
加载精灵后渲染精灵的正确方法吗?我是新手使用精灵,并从纹理图集加载纹理,所以我想知道这是否是正确的做事方式。
此外,当我初始化游戏时,我从TextureAtlas加载了许多不同的Sprite
个对象。每个精灵都拥有一个代表游戏对象的纹理,但是我理解你使用sprite.render(SpriteBatch batch)
渲染一个精灵,所以我只能使用一个精灵,从TextureAtlas
加载一个游戏对象,因为我还必须设置精灵的比例和位置,因为它代表游戏对象。我习惯于加载Texture
,然后在给定位置使用batch.render()
渲染此纹理,但如果我使用精灵,我也不知道这是如何实现的。即使我使用batch.render(Sprite, x, y)
,我也无法正确缩放精灵,因为正如我之前提到的,我想在保持像素化效果的同时缩放精灵,即便如此,使用Sprite.scale()
方法,这会将Sprite对象整体缩放,使得无法对多个游戏对象多次使用Sprite
纹理。
任何建议都将不胜感激。
我目前用于渲染/加载精灵的代码如下:
从TextureAtlas加载:
public static TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("data/texture/pack/output/pack.pack"));
public static Sprite sprite = atlas.createSprite("buttonUp");
sprite.setScale(10);
渲染精灵:GdxGame.WIDTH / HEIGHT为1920x1080。虽然桌面窗口是从该大小缩小的。因此,所有内容都呈现为屏幕为1920x1080。
batch = new SpriteBatch();
camera = new OrthographicCamera(GdxGame.WIDTH, GdxGame.HEIGHT);
camera.position.set(GdxGame.WIDTH/2, GdxGame.HEIGHT/2, 0);
camera.setToOrtho(false, GdxGame.WIDTH, GdxGame.HEIGHT);
public void render(float delta){
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
camera.update();
sprite.draw(batch);
batch.end();
}
经过进一步调查后,我发现我可以使用Sprite.set(Sprite sprite)
制作Sprite x
Sprite y
的副本,因此会多次渲染每个精灵。但是,这并没有解决缩放精灵的问题。我必须进一步强调,在渲染缩放的精灵时,缩放不是由像素完成的,这意味着它是模糊的。但是,当渲染TextureRegion
时,如果batch.draw(TextureRegion, x, y, width, height)
如果宽度和高度大于原始纹理的宽度和高度,它将缩放每个像素,而不是模糊整个事物以使其看起来像更好。以下是我所说的模糊性的图像:
请注意,即使原始图像较小且像素化,此精灵也会缩放为模糊。
答案 0 :(得分:2)
您在代码或纹理包中使用了哪些TextureFilter设置?尝试“最近”过滤器。如果你将它设置为“线性”或类似,它将始终采用4个纹理像素(纹素)并插值它们以获得要绘制的像素的颜色。
这可能有助于防止模糊,但我不确定它是否会产生你想要的8位外观......