适用于iPad Retina的SkTextureAtlas动画?

时间:2016-01-18 19:29:57

标签: swift sprite-kit

我需要有一个像iPad视网膜屏幕一样大的动画,2048x1536,但是这个尺寸超过了最大尺寸,还有其他任何方式我可以制作一个大的动画吗? 我已经尝试使用一些sprite和SKActions来获得相同的结果,但我想因性能原因切换到SKTextureAtlas

1 个答案:

答案 0 :(得分:2)

让我们忘记这样一个事实:你不能使用那些大图像,并假设你使用的是较小的图像(例如2000x1500可以使用)。这有什么缺点?

内存消耗

当存储在磁盘上时,大小为2000x1500的图像可能只需要20千字节甚至更少,但这与将相同图像加载到内存时的实际内存消耗无关。要计算标准RGBA8888图像所需的RAM,可以使用:

width x height x bytes per pixel = size in memory

RGBA8888格式每个像素使用4个字节(每个红色,绿色,蓝色和alpha通道1个字节)如果进行数学计算,您将看到每个2048x1536图像的内存大约需要12 MB。显然因为memory is not unlimited resource,你很容易遇到内存问题。

批量渲染和绘制调用

另一个更重要的事情是将这些大图片放入地图册并没有什么好处,SpriteKit会在必要时拆分地图集。例如,在十个2000x1500图像的情况下,SpriteKit会将地图集纹理分割为十个地图集纹理。这在渲染时需要10次绘制调用,并且使用地图集的整个目的都会被打败。

<强>解决方案

如果你真的需要那个大动画,请使用视频而不是图像。这是Apple在SKVideoNode部分中推荐的:

  

与任何其他节点一样,您可以将影片节点放在其中的任何位置   节点树和Sprite Kit将正确呈现它。例如,你   可能会使用视频节点来动画一些可能的视觉行为   使用纹理集合定义很昂贵。

或者您可以尝试以不同的方式制作动画,例如。从动画中删除静态部分,并动画真正需要动画的内容。您也可以尝试将动画分成几个部分。