【问题标题】:What is the best way to split an SKTextureAtlas for multiple levels in a game?在游戏中为多个级别拆分 SKTextureAtlas 的最佳方法是什么?
【发布时间】:2016-06-26 01:26:49
【问题描述】:

目前我有一个 SKTextureAtlas,它太大而无法快速加载。它包含我游戏中所有敌人的纹理。我想拆分图集,以便游戏仅加载特定级别所需的纹理。但是,一些敌人出现在多个级别。我应该如何拆分地图集?我不希望为每个级别创建一个图集,因为我必须为重复的敌人复制图像文件,并且当有很多级别时会变得很烦人。有没有更优雅的方法?

【问题讨论】:

  • 在这种情况下你为什么要使用地图集?地图集的全部意义在于组合图像。只是不要使用图集,您就不需要拆分图像。
  • 单独使用图像效率低下,因为 SpriteKit 对每个纹理都进行了渲染。
  • 我没有发现在以 60 FPS 的速度从多个 OpenGL 纹理到同一帧进行合成操作时没有问题。也许在 Mac 上存在显着不同的运行时性能,其中 GPU 和 CPU 具有不同的内存空间并且需要从一种内存转移到另一种内存,但在 iOS 上使用 Atlas 似乎与性能关系不大。
  • 也许,我只是在重复文档上所说的内容。 developer.apple.com/library/ios/documentation/SpriteKit/…

标签: ios sprite-kit sktextureatlas


【解决方案1】:

一个好的场景是当整个关卡在屏幕上可见的所有精灵都进入同一个纹理图集时。在这种情况下,Texture Atlas 被加载到 GPU 中并保留在那里。 在每一帧中,CPU 只需要通知 GPU 每个精灵的坐标/位置/变换,节省了大量的数据传输。

我知道这可能会迫使您复制一些精灵,因为其中一些精灵可用于多个级别。只有您(作为游戏开发者)才能接受。

来自Apple docs

创建纹理图集时,您希望在收集太多或太少纹理之间取得平衡。如果您使用的图像太少,SpriteKit 可能仍需要多次绘制通道来渲染一帧。如果包含太多图像,则可能需要一次将大量纹理数据加载到内存中。因为 Xcode 为您构建了图集,所以您可以相对轻松地在不同的图集配置之间切换。因此,请尝试不同的纹理图集配置,然后选择能够提供最佳性能的组合。

【讨论】:

  • 谢谢!当使用较少的纹理图集时,我忘记了 spritekit 渲染效率,所以似乎每个级别一个是要走的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2010-09-18
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多