【发布时间】:2017-01-22 22:46:04
【问题描述】:
我正在设计一个游戏,我希望最多 20 个节点(子类为 LocationNodes)同时在屏幕上旋转。但是,当我调用以下函数时,我的 CPU 使用率达到 100%,应用程序崩溃。这是 spinLocations() 函数,它在存储在 locationPositions 数组中的节点上调用 spin:
func spinLocations() {
for (key, val) in locationPositions {
let locationNode = fgNode.atPoint(val) as? LocationNode
let finalLocation = generateRandomLocation()
locationNode?.spin(locationNode!, position: generateRandomLocation(), finalPosition: finalLocation)
locationPositions[key] = finalLocation
}
}
在子类LocationNode中,spin函数如下所示:
func spin(_ locationNode: LocationNode, position: CGPoint, finalPosition: CGPoint) {
self.run(SKAction.sequence([SKAction.wait(forDuration: 3.0), SKAction.move(to: position, duration: 3.0), SKAction.move(to: finalPosition, duration: 3.0)]))
}
我怎样才能重写它以免崩溃?
【问题讨论】:
-
您多久调用一次 spin?在我看来,您只是不断添加和添加并最终耗尽内存
-
@amalfilemons
spin()方法中不需要locationNode参数。你不使用它。本例中的位置节点与self相同。 -
@Knight0fDragon 这是最接近的答案。我跑过跟踪,并不是纹理占用了内存,而是动作本身触发了另一个函数,导致无限循环占用了内存。
标签: swift sprite-kit