2

我目前正在开发一个自上而下的 2d 游戏,我正在学习大量关于精灵和精灵处理的知识。我的问题是如何处理一组可以在多达 32 个方向上旋转的精灵。

目前,一个给定的对象有它的精灵表,所有的动画都以对象指向 0 度为方向。现在,由于对象可以向多达 32 个方向旋转,那么使用原始精灵表的最佳方法是什么。我目前最好的猜测是,当对象首次加载到游戏中时,程序基本上会动态创建 32 个以上的精灵表,然后该类型对象的所有后续实例将共享这些精灵表。

无论如何,这方面的任何建议都会有所帮助。如果我需要改写这个问题,请告诉我,我知道这有点奇怪。谢谢

编辑:我想更多的澄清。例如,如果我有一个对象,它有 2 个动画,每个 5 帧,那是一个非常容易创建和组织的精灵表,它是一个简单的 2x5 网格(或 5x2,取决于你的布局方式)。但问题是现在这两个动画必须在 32 个方向上旋转。这意味着最终将有 320 个单独的精灵。我要这么说(如果我错了,请纠正我)因为我担心性能和帧速率,所以不能在每一帧都动态旋转精灵。那么,构成这 2 个动画的 320 个精灵应该如何组织呢?会不会更好

  • 将其视为 32 个 2x5 的精灵表
  • 将精灵表拆分为单独的帧,然后有一个数组,每帧有 32 个不同的方向(所以 32 个方向精灵的 10 个数组)
  • 其他....?
  • 没关系?

谢谢

4

3 回答 3

4

精灵的 32 个方向转换为 11.25 度的 32 次旋转。

您可以将预先计算的图像数量减少到 8 个,您只计算前 90 度 ( 11.25, 22.5, 33.75, 45.0, 56.25, 67.5, 78.75, 90.0) 并动态使用翻转操作。翻转要快得多,因为它们基本上只改变从缓冲区复制图像的顺序。

例如,当您显示旋转 101.25 度的图像时,加载预先计算的 67.5 度的图像并垂直翻转。

我刚刚意识到这只有在您的图形是对称的情况下才有效;-)

在谈论现代计算机时,您可能不需要优化任何东西。预先计算精灵使用的内存当然可以忽略不计,旋转图像时的 cpu 使用量也可能是微不足道的。但是,当您为嵌入式设备编程时,它确实很重要。

于 2009-08-14T10:35:40.533 回答
2

您可以通过设置精灵变换的旋转部分来直接旋转精灵。

有关一些示例代码,请查看此pygame 教程中的 Chimp sprite 。当黑猩猩“头晕”时,它会旋转精灵。

于 2009-08-14T00:51:48.520 回答
1

Typically you will sacrifice either processor time or memory, and you need to balance between the two. Unless you've got some great limit to your processor or you're computing a lot of expensive stuff, there's no real reason to put all that into the memory. Rotating a few sprites with a transform is cheap enough that it is definitely not worth it to store 32x as much information in memory - especially because that information is a bunch of images, and images use up a lot of memory, relatively speaking.

于 2009-08-18T22:18:49.177 回答