首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从内存中释放SKTextureAtlas

从内存中释放SKTextureAtlas
EN

Stack Overflow用户
提问于 2015-07-28 23:03:58
回答 1查看 912关注 0票数 4

我很难弄到一本纹理地图集。目前,我有一个SpriteKit游戏,玩家可以改变他的角色。现在,我有一个全球共享实例的地图集,如下所示。

代码语言:javascript
复制
let char0Atlas: SKTextureAtlas = SKTextureAtlas(named: "Atlas/iPhone/char0")
let char1Atlas: SKTextureAtlas = SKTextureAtlas(named: "Atlas/iPhone/char1")
let char2Atlas: SKTextureAtlas = SKTextureAtlas(named: "Atlas/iPhone/char2")

每个字符,你可以改变为有自己的纹理地图集。我用这样的方法从角色地图集中获取玩家的移动、空闲和跳跃动画:

代码语言:javascript
复制
func charAnimation(char: CharEnum) -> [SKTexture] {
    var temp: [SKTexture] = []
    var name: String = ""

    let atlas: SKTextureAtlas = char.atlasForChar()

    for i in 1...20 {
        if i > 9 { name = "char_\(charId)_idle_00\(i)" }
        else { name = "char_\(charId)_idle_000\(i)" }
        temp.append(atlas.textureNamed(name))
    }

    return temp
}

它存储在player sprite节点类中的数组实例变量中。因此,每当一个字符改变,这些帧被替换为新的帧,所以旧的应该被释放,对吗?

代码语言:javascript
复制
class PlayerNode: SpriteNode {
    private var currentAnimation: [SKTexture] = []
    private var animations: (idle: [SKTexture], run: [SKTexture], jump: [SKTexture]) = PlayerController.animationsForHero(.CharOne)
}

此外,当播放机切换字符时,我使用它预加载纹理地图集:

代码语言:javascript
复制
SKTextureAtlas.preloadTextureAtlases([char.atlasForHero()], withCompletionHandler: { () -> Void in
            updateChar()
        })

为什么SpriteKit从未将内存从先前的角色动画中释放出来?如果播放器切换到新字符,内存会不断增加,并使应用程序崩溃。如果已在该会话中选定的字符再次被选中,则内存不会增加。这显示了内存泄漏。角色动画没有被释放。为什么?

我知道SpriteKit应该自己来处理这些事情,所以这就是为什么它令人困惑的原因。我自己绝对没有办法释放纹理地图集吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-08-05 07:23:15

@蜻蜓眼第一点是正确的:您只需预加载一次SKTextureAtlas

看看苹果的文档与雪碧合作

-

  1. 将纹理预加载到内存中
  2. 从内存中删除纹理

如果内存未被释放,这可能是因为仍然存在对SKTexture的引用,正如第二点所指出的:

在将纹理加载到图形硬件的内存中后,它将留在内存中,直到删除引用SKTexture对象为止。这意味着在级别之间(或者在动态游戏中),您可能需要确保删除纹理对象。通过删除对SKTexture对象的任何强引用来删除该对象,包括:

  • 游戏中来自SKSpriteNodeSKEffectNode对象的所有纹理引用
  • 在您自己的代码中对纹理的任何强引用
  • 用于创建纹理对象的SKTextureAtlas对象
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31688604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档