我有一个大约有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,建议使用哪种帧速率和图像大小?
答案 0 :(得分:2)
您应该记住,图像文件大小(在您的示例中为1Kb)与同一图像存储在RAM中所需的内存量无关。您可以使用以下公式计算所需的内存量:
宽度x高度x每个像素的字节数=内存中的大小
如果您使用标准RGBA8888像素格式,这意味着您的图像将需要大约0.5兆字节的RAM内存,因为RGBA8888每像素使用4个字节 - 每个红色,绿色,蓝色1个字节,Alpha透明度1个字节。您可以阅读更多here。
所以你可以做的是优化纹理并使用不同的纹理格式。这是关于纹理optimization的另一个例子。