【问题标题】:App Crashes: Memory issue?应用程序崩溃:内存问题?
【发布时间】:2017-01-27 01:54:57
【问题描述】:

我正在用 Sprite Kit 进行一些试验,我注意到当我让我的应用运行一段时间时它崩溃了。

我正在尝试做的是画一条跟随我的玩家运动的线,我是这样做的:

var ref: CGMutablePathRef = CGPathCreateMutable()
var shapeLine: SKShapeNode!

override func update (){

shapeLine.removeFromParent()

CGPathAddLineToPoint(ref, nil, player.position.x, player.position.y) 

shapeLine = SKShapeNode(path: ref)
shapeLine.lineWidth = 3
shapeLine.path = ref

addChild(shapeLine)
}

这很好用,我每次都删除节点,更新路径,并使用新路径创建另一个节点。

关键是几秒钟后(大约 25 秒)它崩溃了。 节点是不变的,因为我每次都添加和删除。帧率在崩溃前开始下降,从 30fps 下降到 20fps。

我觉得奇怪的是内存的使用,它增加了很多,甚至在崩溃之前使用了大约 800mb。

是我忘记了什么,还是只是路径增加太多而无法处理?

【问题讨论】:

  • 您为什么不尝试尝试更改已经存在的shapeLine 的路径,看看是否部分问题来自于不断创建新的SKShapeNode。换句话说,创建一次shapeLine,然后再创建一次,只需更新路径即可。
  • 已经试过了,结果一样:/
  • 多久运行一次?每一帧?例如在这 25 秒内,update 被调用了多少次?
  • 什么意思?我已经写好了帧率,取平均 25fps,所以 25fps * 25s 给出了 udate 被调用的次数
  • 但是我也注意到它只是玩家拥有的属性是25s,如果我将一些属性更改为速度它也可能在5s左右崩溃。我很确定这是 Alessandro 说的那样回答的错误!

标签: ios xcode memory memory-leaks sprite-kit


【解决方案1】:

不幸的是SKShapeNode被bug了,这个库组件周围有很多bug,其中大部分都报告了here。

您可以将 SKShapeNode 转换为纹理 (textureFromNode),而不是与 SKSpriteNode 一起使用。

【讨论】:

  • 您好,感谢您的回答,您使用“textureFromNode”是什么意思,您能否举例说明如何使用它并让它工作,因为我无法做到跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多