swift - 如何回收带有动画的 SKSpriteNodes

标签 swift sprite-kit cpu skspritenode

我正在用 Swift 和 SpriteKit 制作我的第一款游戏,我遇到了无数 CPU 问题,在玩游戏几分钟后我的 CPU 就接近 100%。这似乎不应该发生,因为我实际上一次只画了 20 个左右的动画敌人。虽然这不是唯一的问题,但我相信实例化我的敌人类是造成这种过度使用的重要原因。

在我的代码中,我每隔几秒钟就会实例化一个新的敌对外星人。我相当确定我正在正确地移除它们——无论是在接触时还是当它们离开屏幕时。所以我相信我的下一次尝试应该是尝试回收它们,而不是不断地完全删除和添加它们。

我正在添加:

func addNormAlien(){
    let mult = normAlienMultiplers

    let alienInst = normAlien(startPos:CGPoint(x: 10,y: 10), speed: random(UInt32(10), max: UInt32(50))*mult[0])

    let yStart = random(UInt32(alienInst.size.height/2), max: UInt32(size.height-alienInst.size.height))
    alienInst.position = CGPoint(x:size.width+alienInst.size.width/2, y:yStart)

    addChild(alienInst)
    totalNodes+=1
}

并使用一般声明删除:alien.removeFromParent() 在两种联系方法中,如果它的 x 位置超过某个点,则在更新中。

我在想,我可以创建一个数组(或队列?)某种类型的数组,以适应某个最大数量,并且我可以将它们插入和推离。有没有合适的方法来回收像这样的 SKSpriteNode 子类?附言在 iPhone 上测试时,CPU 使用的适当范围是多少?

最佳答案

我会说你应该看看at the prototype pattern .您基本上只在第一次创建每个敌人,然后克隆它们以在游戏中使用。至少这应该减少文件系统交互(纹理加载等)。

关于swift - 如何回收带有动画的 SKSpriteNodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39478756/

相关文章:

linux - 长时间监控linux进程,保存成文本文件或csv文件

swift - 尝试使用 Swift 以编程方式制作等距网格

ios - touchesBegan 方法的问题

ios - 显示屏左侧的 TouchesBegan 延迟

Linux:如何加载系统内存?

swift - VNRecognizeTextRequest 无法识别横向模式下扫描的文本

swift - 测试 Swift 扩展

ios - 添加 pod 后 Facebook Swift (facebook-sdk-swift) 错误

swift - .Element 含糊不清地使用 Element SWXMLHash swift

x86 - 与 6502 相比,模拟 x86 架构时会出现什么问题?