저는 Swift와 SpriteKit으로 첫 게임을하고 있으며 몇 분의 게임 플레이 후에 100 % CPU에 접근하는 수많은 CPU 문제에 부딪혔습니다. 한 번에 20,000 명의 애니메이션 적을 그리는 것만으로도 이런 일은 일어나지 않을 것 같습니다. 그것이 유일한 문제는 아니지만, 적 클래스를 인스턴스화하는 것이 이러한 과용에 크게 기여하고 있다고 생각합니다.애니메이션을 사용하여 SKSpriteNodes를 재활용하는 방법
제 코드에서는 매 2 초마다 새로운 적의 외계인을 인스턴스화합니다. 나는 그들이 접촉에서 또는 화면에서 벗어날 때 적절하게 제거하고 있음을 확신합니다. 그래서 저는 다음 시도가 그들을 계속해서 완전히 제거하고 추가하는 대신에 그것들을 시도하고 재활용해야한다고 믿습니다.
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 사용의 적절한 범위는 무엇입니까?
지금하고 싶은지 확실하지 않습니다. 이것이 당신의 첫 번째 게임이기 때문에, 그리고 당신의 질문 중 일부에 대답 해 준 누군가로서, 당신은 K.I.S.S 모델을 따르기를 원합니다. 주어진 "20ish"적을 감안할 때, 20 가지 이상의 방법이 있거나 코드에서 뭔가 나쁜 일을하고 있음을 나타냅니다. 객체 대기열로 이동하더라도 성능이 약간 향상 될 수 있지만 코드가 수정되지 않고 다른 문제가 발생합니다. 나는 이전에 CPU의 문제에 접근하는 방법에 대한 제안을했고, 당신이 그들 모두를했는지 의심 스럽다. –