Java 纹理从区域到纹理

Java 纹理从区域到纹理,java,libgdx,textures,Java,Libgdx,Textures,我正在尝试从TextureAtlas中获取纹理区域,但作为纹理 我试过: textureAtlas.findRegion("explosion").getTexture(); 但它会返回整个纹理图谱图像 我需要这个类,我创建了类似于雪碧。我避免使用雪碧,因为它不能满足我的需要 我找到的所有答案都是针对精灵类的。你可能误解了纹理、纹理区域和纹理特拉斯的概念。做你想做的事没有简单的方法,这样做也没有任何意义。这样做首先会破坏使用TextureAtlas的全部目的 您可以将纹理视为磁盘上图像文件的一

我正在尝试从TextureAtlas中获取纹理区域,但作为纹理

我试过:

textureAtlas.findRegion("explosion").getTexture();
但它会返回整个纹理图谱图像

我需要这个类,我创建了类似于雪碧。我避免使用雪碧,因为它不能满足我的需要


我找到的所有答案都是针对精灵类的。

你可能误解了
纹理
纹理区域
纹理特拉斯
的概念。做你想做的事没有简单的方法,这样做也没有任何意义。这样做首先会破坏使用
TextureAtlas
的全部目的

您可以将
纹理
视为磁盘上图像文件的一对一映射。例如,
.png
文件。因此,基本上,对于磁盘上的每个图像文件,都可以有一个
纹理
实例。但是,如果磁盘上没有加载纹理的图像文件,则不能有
纹理
实例。(严格地说,您可以创建一个
纹理
实例,而不需要磁盘上的文件,例如可以说是内存中的文件,但这与您的问题无关)

TextureAtlas
用于将多个较小的图像合并到磁盘上的单个图像文件中。这是使用例如
TexturePacker
来完成的,该工具使用多个图像作为磁盘上的文件作为输入,然后将其组合到磁盘上的单个图像文件中。之所以这样做,是因为拥有一个(或几个)大图像比拥有许多小图像更有效

因此,由于您使用的是
纹理特拉斯(这是一件好事),这意味着您的磁盘上只有一个图像文件。因为磁盘上只有一个图像文件,所以您也只有(并且需要)一个
Texture
实例

通常不应直接使用
纹理。相反,您应该使用
纹理区域
。这只是一个类,它指定了
纹理
,以及该纹理中的特定区域(
x
y
宽度
高度
)。这正是你要找的。您可以直接绘制
纹理区域
,例如使用
SpriteBatch
。这是一种非常方便的指定图像的方法

请注意,
Sprite
类扩展了
TextureRegion
,只添加了一些额外的方便属性。因此,如果您有
Sprite
,那么您也有一个
texturereregion
,如果不需要,您可以忽略其他属性


因此,如果您创建了一个类,该类需要
TextureAtlas
中的图像,并且依赖
Texture
实现该类,那么您的实现是错误的。在这种情况下,您最好使用
TextureRegion
而不是
Texture

来修改该实现。谢谢您的解释。我没有使用雪碧,因为我无法添加两种不同的纹理。