【问题标题】:What is the best way to handle rotating sprites for a top-down view game为自上而下的视图游戏处理旋转精灵的最佳方法是什么
【发布时间】:2010-11-19 12:22:46
【问题描述】:

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

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

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

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

  • 将其视为 32 个 2x5 精灵表
  • 将精灵表拆分为单独的帧,然后在每帧中创建一个包含 32 个不同方向的数组(因此 32 个方向精灵的 10 个数组)
  • 其他....?
  • 没关系?

谢谢

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    精灵的 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使用量也可能是。但是,当您为嵌入式设备编程时,它确实很重要。

    【讨论】:

    • 我不知道为什么我没有想到只预旋转前 90 度。好想法;)
    【解决方案2】:

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

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

    【讨论】:

    • 好吧,我的意思是这行得通。但老实说,我已经在这样做了,我想我的问题是如何以最有效的方式组织精灵及其旋转......也许我需要重新表述一下
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多