我在Swift和SpriteKit中製作了我的第一款遊戲,並且遇到了無數的CPU問題,在幾分鐘的遊戲過程中我接近100%的CPU。這似乎不應該發生,因爲我一次只畫20個動畫的敵人。雖然這不是唯一的問題,但我相信實例化我的敵人階級正在爲這種過度使用做出重大貢獻。如何使用動畫回收SKSpriteNodes
在我的代碼中,我每隔幾秒就實例化一個新的敵人外星人。我很確定我正在將它們正確地移除 - 無論是在聯繫人還是在離開屏幕時。所以我相信我的下一個嘗試應該是嘗試並回收它們,而不是不斷徹底刪除和添加它們。
我與添加:
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子類?附:什麼是適當的CPU使用範圍 - 在iPhone上測試時?
我不確定你現在是否想要這樣做。因爲這是你的第一場比賽,並且作爲之前回答過你的一些問題的人,你想要遵循K.I.S.S模型。考慮到你只有20個「敵人」,那麼這就表明你要麼超過20個,要麼你的代碼做得不好。即使你去了一個對象隊列,你可能會獲得一些性能提升,但是你的代碼不會被修復,你會遇到其他問題。之前我曾就如何解決CPU的問題提出了一些建議,我懷疑你是否做過這些。 –