TextureAtlas 区域到 Texture

TextureAtlas region to Texture

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

我试过:

textureAtlas.findRegion("explosion").getTexture();

但它 returns 整个纹理图集图像。

我需要这个来创建一个类似于 Sprite 的 class。我避免使用 Sprite,因为它不能满足我的需求。

我找到的所有答案都是针对 Sprite class。

您可能误解了 TextureTextureRegionTextureAtlas 的概念。没有简单的方法可以做你想做的事,这样做也没有任何意义。这样做首先会破坏使用 TextureAtlas 的全部目的。

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

A TextureAtlas 用于将多个较小的图像组合成磁盘上的单个图像文件。这是使用例如完成的TexturePacker,这是一个使用多个图像作为磁盘上的文件作为输入,然后将其组合成磁盘上的单个图像文件的工具。这样做是因为拥有一个(或几个)大图像比拥有许多小图像的性能要高得多。

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

您通常不应该直接使用 Texture。相反,您应该使用 TextureRegion。这只是一个 class,指定 Texture 以及该纹理中的特定区域(xywidthheight) .这正是您要寻找的。你可以直接画一个TextureRegion,例如使用 SpriteBatch。所以这是一种非常方便的指定图片的方式。

请注意 Sprite class 扩展了 TextureRegion 并且只是添加了一些额外的方便属性。所以如果你有 Sprite 那么你也有一个 TextureRegion,如果你不需要它们,你可以简单地忽略它们。

因此,如果您创建的 class 需要 TextureAtlas 中的图像并为此依赖 Texture,那么您的实现方式不正确。在这种情况下,您可以做的最好的事情是使用 TextureRegion 而不是 Texture.

来修改该实现