【问题标题】:TextureAtlas region to TextureTextureAtlas 区域到 Texture
【发布时间】:2018-02-02 05:19:00
【问题描述】:

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

我试过了:

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

但它返回整个纹理图集图像。

对于我创建的类似于 Sprite 的类,我需要这个。我避免使用 Sprite,因为它无法满足我的需求。

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

【问题讨论】:

    标签: java libgdx textures


    【解决方案1】:

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

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

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

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

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

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

    因此,如果您创建了一个需要在 TextureAtlas 中提供图像的类,并为此依赖 Texture,那么您的实现不正确。在这种情况下,您可以做的最好的事情是使用TextureRegion 而不是Texture 来修改该实现。

    【讨论】:

    • 感谢您的解释。我没有使用 Sprite,因为我无法为其添加两种不同的纹理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多