SpriteKit 丢失纹理
Posted
技术标签:
【中文标题】SpriteKit 丢失纹理【英文标题】:SpriteKit loses textures 【发布时间】:2014-03-22 11:25:42 【问题描述】:我正在制作基于SpriteKit
的多层次游戏。
一切都很好,除了一件事:当用户玩了很长时间,改变了很多关卡等等......然后SpriteKit
开始丢失纹理。
我的意思是没有像图像加载失败时那样的大红十字,而是像什么都没有一样的空白空间。
数小时的调试和谷歌搜索没有产生任何结果。
我该如何处理这个错误?
【问题讨论】:
第一件事:检查内存使用情况和对象生命周期/使用 Instruments 泄漏。也许您只是由于内存中的泄漏或某些对象引用(可能是不必要的)而耗尽了内存。 学习Cocos2D,我做到了。完全没有泄漏。但我注意到一种奇怪的行为——我的自定义 SKScene 有时即使没有引用它也不会发布。检查了 10 次,引用计数为 0,但场景仍在内存中。 您使用的是 SKTextureAtlas 吗?如果是这样,为了进行测试,请尝试将图像从 .atlas 目录移到一个普通目录中。有报道称 SKTextureAltas 自 ios8 Beta4 起已损坏。 嗨,我知道这是一个旧线程,但最后你找到解决问题的方法了吗?遇到同样的问题。 【参考方案1】:我认为我可能遇到了相关问题,除了在 SKSpriteNode 上快速运行动作时会发生纹理丢失。在我的代码中,每次触摸时我都会运行一个动作,当触摸快速且动画快速触发时,SKSpriteNode 的基本纹理似乎消失了。没有内存警告,没有来自控制台的窥视; SKSpriteNode 的纹理被神奇地设置为 nil。
我从你的问题中得到的印象是这不是你的确切原因,但你有同样的症状。不幸的是,我不知道是什么原因造成的。我为解决这个问题所做的工作是不断检查我的 SKSprite 节点上的纹理是否在我运行 SKAction 后立即设置为 nil,然后在需要时重新分配它。
所以,我正在做的一个精简版(在 Swift 中)看起来像这样:
func doAnimation( )
_character.runAction(someSKAction, withKey: "animation")
//Whoops!, we lost our base texture again!
if _character.texture == nil
let atlas = SKTextureAtlas(named: "someAtlasName")
let texture = atlas.textureNamed("idleFrame" )
_character.texture = texture
这并不是真正的解决方案,而是一种解决方法,但它可能会适应您的情况,直到您(或 SO 上的其他人)弄明白为止。我不会说它不丑。
顺便说一句,你不是唯一遇到纹理消失的问题;我对类似问题here写了类似的回复。
【讨论】:
我在 Obj-C 的 SpriteKit 中使用 unarchiveFromFile 编程模式,我没有纹理,但最糟糕的是,精灵在那里。当我记录这个对象时,我得到这个:背景是:以上是关于SpriteKit 丢失纹理的主要内容,如果未能解决你的问题,请参考以下文章
“纹理图集不支持模板渲染”SpriteKit 和 Xcode