我正在用 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/