【问题标题】:How to remove background from sprite sheets?如何从精灵表中删除背景?
【发布时间】:2013-08-25 22:44:26
【问题描述】:

过去,我总是制作自己的精灵表,只是让它们透明。但我总是看到以粉红色作为背景的精灵表。你会如何在游戏中把它敲出来?

还有哪个更好?使用透明的 .png 文件?还是有纯色背景?

如果有人想知道,我会使用 BufferedImage 类并获得SubImage。

【问题讨论】:

  • 个人觉得透明PNG比较简单,但是加载的时候可能需要更多的处理,不过这样的话,我就不用管了。
  • 你的最终目标是让你的精灵的背景透明,还是开发一个软件来做到这一点?
  • 有时编辑器会将透明显示为另一种颜色/图案
  • 请参阅this answer,了解将图像中的单色变为透明的方法。

标签: java image png transparency bufferedimage


【解决方案1】:

通常有三种方法可以使精灵透明,使用单独的 Alpha 通道、使用单独的位掩码或仅使用透明颜色。后者通常与索引颜色一起使用,因为它就像用透明度替换索引之一(在您的情况下为粉红色)的颜色一样简单。

我看到这种技术的唯一优势是保留内存。但是我没有制作很多游戏,所以这样做可能还有其他原因.. ;-)

【讨论】:

  • 这种方法的缺点是它只适用于1位透明度。 “真正的”PNG 透明度可以是 1 位(开或关)或完整的 8 位范围。不过,它会添加一个全新的颜色通道,因此请仅在需要可变透明度时使用它。
【解决方案2】:

如果你不介意使用库,我使用 lwjgl,并使用 texturepacker 制作 spritesheets。

Texturepacker 自动为纹理生成 xml 文件,并将纹理全部放在一个 png 上。

完成后,我使用 gimp,然后使用橡皮擦工具直到背景透明。

然后在你的程序中你只需要输入

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

并且透明度应该自动工作,但实际设置访问精灵表等有点痛苦

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多