gpt4 book ai didi

ios - Sprite 套件,从内存中移除动画纹理

转载 作者:搜寻专家 更新时间:2023-10-31 08:34:09 25 4
gpt4 key购买 nike

我在游戏加载时在我的 View Controller 中初始化了大约 30 个动画纹理,如下所示:

for i=0; i<atlasName.count; i++ {
frameNumber = animationTextures.animationTextureAtlas[i].textureNames.count
firstFrameName = "\(atlasName[i])1"

animationTextures.animationFrames.append([animationTextures.animationTextureAtlas[i].textureNamed(firstFrameName)])

for j=2; j<=frameNumber; j++ {
var frameName = "\(atlasName[i])\(j)"
animationTextures.animationFrames[i].append(animationTextures.animationTextureAtlas[i].textureNamed(frameName))
}

animationTextures.firstFrame.append(animationTextures.animationFrames[i][0])
}

基本上,我将所有动画放入一个数组中,这样我就可以轻松访问它们。

在游戏过程中,这些动画中的每一个都会出现很短的时间,当我不需要它们时,我使用 .removeFromParent() 将其删除,但问题是它仍然保留在设备的内存中因此,一旦大约 15-20 个动画出现在游戏中并进入内存,它就会达到大约 450-500MB,并导致游戏在 iPhone 4 和 4s 上崩溃。

有谁知道我怎样才能真正从内存中删除该动画,以便它不再需要时不再占用空间?

最佳答案

SpriteKit 使用自己的缓存机制,您无法自行清除缓存。

从您所说的情况来看,您的代码中某处似乎存在内存泄漏。请记住,您需要删除纹理的所有引用才能被 ARC 释放。

在您的情况下,从父对象中删除纹理是不够的,因为纹理存储在数组中。您需要从数组中删除所有纹理并且没有其他对它们的引用才能正确释放它们。

450MB 以上对于几个纹理来说绝对太多了。我建议您运行 Instruments 并检查内存泄漏。

关于ios - Sprite 套件,从内存中移除动画纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com