TextureAtlas 区域到 Texture
TextureAtlas region to Texture
我正在尝试从 TextureAtlas 获取纹理区域,但作为纹理。
我试过:
textureAtlas.findRegion("explosion").getTexture();
但它 returns 整个纹理图集图像。
我需要这个来创建一个类似于 Sprite 的 class。我避免使用 Sprite,因为它不能满足我的需求。
我找到的所有答案都是针对 Sprite class。
您可能误解了 Texture
、TextureRegion
和 TextureAtlas
的概念。没有简单的方法可以做你想做的事,这样做也没有任何意义。这样做首先会破坏使用 TextureAtlas
的全部目的。
您可以将 Texture
视为与磁盘上图像文件的一对一映射。例如 .png
文件。因此,基本上,对于您拥有的磁盘上的每个图像文件,您都可以拥有一个 Texture
实例。但是如果磁盘上没有从中加载纹理的图像文件,则不能有 Texture
实例。 (严格来说,您可以在磁盘上创建一个没有文件的 Texture
实例,例如内存中的文件,但这与您的问题无关)
A TextureAtlas
用于将多个较小的图像组合成磁盘上的单个图像文件。这是使用例如完成的TexturePacker
,这是一个使用多个图像作为磁盘上的文件作为输入,然后将其组合成磁盘上的单个图像文件的工具。这样做是因为拥有一个(或几个)大图像比拥有许多小图像的性能要高得多。
因此,因为您使用的是 TextureAtlas
(这是一件好事),这意味着磁盘上只有一个图像文件。而且因为磁盘上只有一个图像文件,所以您也只有(并且需要)一个 Texture
个实例。
您通常不应该直接使用 Texture
。相反,您应该使用 TextureRegion
。这只是一个 class,指定 Texture
以及该纹理中的特定区域(x
、y
、width
和 height
) .这正是您要寻找的。你可以直接画一个TextureRegion
,例如使用 SpriteBatch
。所以这是一种非常方便的指定图片的方式。
请注意 Sprite
class 扩展了 TextureRegion
并且只是添加了一些额外的方便属性。所以如果你有 Sprite
那么你也有一个 TextureRegion
,如果你不需要它们,你可以简单地忽略它们。
因此,如果您创建的 class 需要 TextureAtlas
中的图像并为此依赖 Texture
,那么您的实现方式不正确。在这种情况下,您可以做的最好的事情是使用 TextureRegion
而不是 Texture
.
来修改该实现
我正在尝试从 TextureAtlas 获取纹理区域,但作为纹理。
我试过:
textureAtlas.findRegion("explosion").getTexture();
但它 returns 整个纹理图集图像。
我需要这个来创建一个类似于 Sprite 的 class。我避免使用 Sprite,因为它不能满足我的需求。
我找到的所有答案都是针对 Sprite class。
您可能误解了 Texture
、TextureRegion
和 TextureAtlas
的概念。没有简单的方法可以做你想做的事,这样做也没有任何意义。这样做首先会破坏使用 TextureAtlas
的全部目的。
您可以将 Texture
视为与磁盘上图像文件的一对一映射。例如 .png
文件。因此,基本上,对于您拥有的磁盘上的每个图像文件,您都可以拥有一个 Texture
实例。但是如果磁盘上没有从中加载纹理的图像文件,则不能有 Texture
实例。 (严格来说,您可以在磁盘上创建一个没有文件的 Texture
实例,例如内存中的文件,但这与您的问题无关)
A TextureAtlas
用于将多个较小的图像组合成磁盘上的单个图像文件。这是使用例如完成的TexturePacker
,这是一个使用多个图像作为磁盘上的文件作为输入,然后将其组合成磁盘上的单个图像文件的工具。这样做是因为拥有一个(或几个)大图像比拥有许多小图像的性能要高得多。
因此,因为您使用的是 TextureAtlas
(这是一件好事),这意味着磁盘上只有一个图像文件。而且因为磁盘上只有一个图像文件,所以您也只有(并且需要)一个 Texture
个实例。
您通常不应该直接使用 Texture
。相反,您应该使用 TextureRegion
。这只是一个 class,指定 Texture
以及该纹理中的特定区域(x
、y
、width
和 height
) .这正是您要寻找的。你可以直接画一个TextureRegion
,例如使用 SpriteBatch
。所以这是一种非常方便的指定图片的方式。
请注意 Sprite
class 扩展了 TextureRegion
并且只是添加了一些额外的方便属性。所以如果你有 Sprite
那么你也有一个 TextureRegion
,如果你不需要它们,你可以简单地忽略它们。
因此,如果您创建的 class 需要 TextureAtlas
中的图像并为此依赖 Texture
,那么您的实现方式不正确。在这种情况下,您可以做的最好的事情是使用 TextureRegion
而不是 Texture
.