SpriteKit SKTexture.preloadTextures高内存使用率Swift

时间:2015-03-17 20:53:39

标签: memory sprite-kit skaction

我有一个大约有90张PNG图像的SKTextureAtlas。每个图像的分辨率为2000 x 70像素,大小约为1 KB。

现在我把Atlas的这些图像放到这样的数组中:

var dropBarAtlas = SKTextureAtlas(named: "DropBar")

for i in 0..<dropBarAtlas.textureNames.count{
        var textuteName = NSString(format: "DropBar%i", i)
        var texture = dropBarAtlas.textureNamed(textuteName)
        dropFrames.addObject(texture)
   }

然后我用didMoveToView中的纹理预加载数组:

SKTexture.preloadTextures(dropFrames, withCompletionHandler: { () -> Void in})

要使用 30 fps 播放动画,我使用SKAction.animateWithTextures

var animateDropBar = SKAction.animateWithTextures(dropFrames, timePerFrame: 0.033)
dropBar.runAction(animateDropBar)

我的问题是,当我预加载纹理时,内存使用量增加到大约300 MB。 有更高性能的解决方案吗?
对于SKAction.animateWithTextures,建议使用哪种帧速率和图像大小?

1 个答案:

答案 0 :(得分:2)

您应该记住,图像文件大小(在您的示例中为1Kb)与同一图像存储在RAM中所需的内存量无关。您可以使用以下公式计算所需的内存量:

宽度x高度x每个像素的字节数=内存中的大小

如果您使用标准RGBA8888像素格式,这意味着您的图像将需要大约0.5兆字节的RAM内存,因为RGBA8888每像素使用4个字节 - 每个红色,绿色,蓝色1个字节,Alpha透明度1个字节。您可以阅读更多here

所以你可以做的是优化纹理并使用不同的纹理格式。这是关于纹理optimization的另一个例子。