处理自上而下视图游戏的旋转精灵的最佳方法是什么

时间:2009-08-14 00:47:42

标签: python pygame sprite

我正在进行一场自上而下的2D视图游戏,我正在学习关于精灵和精灵处理的知识。我的问题是如何处理一组可以在32个方向上旋转的精灵。

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

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

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

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

由于

3 个答案:

答案 0 :(得分:4)

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

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

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

我刚才意识到只有你的图形对称才有效; - )

在谈论现代计算机时,您可能不需要优化任何内容。预先计算精灵所使用的内存当然可以忽略不计,并且旋转图像时的CPU使用率可能也是如此。但是,当您为嵌入式设备编程时,它确实很重要。

答案 1 :(得分:2)

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

对于某些示例代码,请查看此pygame tutorial中的Chimp精灵。当黑猩猩“头晕目眩”时,它会旋转精灵。

答案 2 :(得分:1)

通常,您将牺牲处理器时间或内存,并且需要在两者之间取得平衡。除非你对你的处理器有一些很大的限制,或者你计算了很多昂贵的东西,否则没有理由把所有这些都放到内存中。使用变换旋转一些精灵足够便宜,因此在内存中存储32倍的信息绝对不值得 - 特别是因为该信息是一堆图像,相对而言,图像占用了大量内存。 p>