新手程序员在这里,
我正在使用 Allegro 5 设计一个 2d 游戏,我注意到在使用 allegro 中的位图(实际上是从 photoshop 导出的 png 文件......)时,旋转的图像看起来不那么出色:旋转的流星
左边那个是原来的方向,右边那个旋转了10度。它们有点小,但边缘质量的差异很明显。
首先,我真的很想避免创建一个包含所有不同旋转位置的精灵表,原因如下:
我对流星和我正在创建的所有其他物体有不同的“效果”,这些物体需要在物体周围发光。我将在每个对象周围应用至少 6 种不同的发光颜色。现在,这些流星中的每一个都需要旋转 30 帧才能显得平滑。假设我想要在游戏中像这样工作的区区 10 个不同的对象;仅用于这些对象的文件就有 1800 个!
我宁愿专注于寻找一种更好的方式来显示旋转的图像,而不是花时间去做。
我已经尝试研究各种 Photoshop 技术,但我能想到的最好的方法是让 Photoshop 中的圆圈稍微小一点,然后让它“发光”相同的灰色阴影,这可以解决旋转问题,但它会使流星看起来很模糊.
然后我做了一些研究,发现 Allegro 5 中提供了各种混合选项。我已经尝试了 al_set_blender 中所有可能的选项 - 它们都没有解决锯齿状边缘的问题。
最后,我再次搜索如何处理这个问题并发现了这篇关于 Allegro 5 中抗锯齿的帖子。正如答案中指出的,有一个可用的抗锯齿选项,但主要限制是只能在绘制图元时工作到后台缓冲区。实际上实现这将是大量的工作,并且每次绘制所有必需的原语似乎效率很低。
然而,在另一篇文章中引起我注意的是这条评论:
顺便说一句,如果您不需要游戏的实时性能,您还可以连接到 libcairo 以绘制漂亮的矢量图形。将它连接到 Allegro 非常简单,但这是一个不同的话题。
因此,我再次对图形库以及它们如何解决我的问题进行了研究。我查看了 Cairo、SDL、Qt、ImageMagic 等,但最终我同意 Cairo 似乎是适合这项工作的工具。
最后我们得出这篇文章的原因:
我的问题是:如何将 Cairo 与 Allegro 5 “挂钩”?
现在,我还没有在 Cairo 上做过任何工作,所以我并没有被它束缚,但我想继续使用 Allegro,除非真的有充分的理由切换到其他东西。
Allegro 有一种简单直接的方式来创建显示并使用 allegro 命令对其进行绘图。但开罗有自己的处事方式,而且开罗似乎根本不管显示器。我可以想象两者一起工作的唯一方法是 Cairo 接收绘图命令,绘制图像,将图像保存为 png 文件,然后打开 allegro 函数并在该文件中读取 1 帧。这不可能是评论者的意思。
无论如何,请随意批评我的思维过程。我不会被冒犯的。如果有什么简单的你觉得我没看懂,请赐教。