如何在libGDX中防止纹理变成低分辨率?

3
我正在使用libGDX制作一个小游戏,我制作了一个小的sprite(32x32),它显示在屏幕中央。但是当我将纹理渲染到屏幕上时,它失去了质量。由于纹理非常小,我将屏幕宽度和高度分别设置为200和100。任何提示或答案都将不胜感激。
1个回答

3

您的精灵(32x32)需要显示在比32x32更大的区域上,这意味着图像需要进行放大和插值处理(即需要计算32个已知像素之间的像素)。一种常见的方法是使用平滑(通常是线性)插值来填充额外的像素,这对于照片级纹理效果很好;它似乎在这里发生了。

对于像素艺术,您可能希望使用“最近邻”插值。虽然确切的设置方式取决于代码结构,但您可以尝试以下操作:

textureObject.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);

你觉得你能告诉我如何在纳秒级动画上使用过滤器吗? - playper3
1
@playper3 这取决于你的动画是如何实现的。如果你只是在对纹理进行变换动画,那么就在纹理上设置过滤器。如果它是基于 TextureRegions 的动画,则在底层纹理上设置过滤器。一般来说,如果动画是基于底层的 Texture 对象,那么你应该能够直接在该 Texture 对象上设置过滤器。如果是其他情况,那么你需要进一步澄清情况。 - nanofarad
最后一件事,如果我的动画看起来像这样 'Array<TextureAtlas.AtlasRegion> rightFrames = textureAtlas.findRegions("right");' 和 'right = new Animation<TextureRegion>(FRAME_DURATION, rightFrames, Animation.PlayMode.LOOP);' 那么我应该在哪里放置 .setFilter。 - playper3
@playper3 你是如何创建纹理图集的?如果我没记错的话,它需要设置为最近邻居,但我不记得具体细节了。 - nanofarad
我创建了纹理图集,代码如下:textureAtlas = new TextureAtlas("playerSprite.txt"); - playper3
1
@playper3 如果我没记错的话,playerSprite.txt 需要更新以指示适当的插值。根据您创建文件的方式,您可能需要重新运行创建它的工具。 - nanofarad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接