2016-09-13 3 views
0

저는 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 사용의 적절한 범위는 무엇입니까?

+0

지금하고 싶은지 확실하지 않습니다. 이것이 당신의 첫 번째 게임이기 때문에, 그리고 당신의 질문 중 일부에 대답 해 준 누군가로서, 당신은 K.I.S.S 모델을 따르기를 원합니다. 주어진 "20ish"적을 감안할 때, 20 가지 이상의 방법이 있거나 코드에서 뭔가 나쁜 일을하고 있음을 나타냅니다. 객체 대기열로 이동하더라도 성능이 약간 향상 될 수 있지만 코드가 수정되지 않고 다른 문제가 발생합니다. 나는 이전에 CPU의 문제에 접근하는 방법에 대한 제안을했고, 당신이 그들 모두를했는지 의심 스럽다. –

답변

1

나는 at the prototype pattern을 봐야한다고 말하고 싶습니다. 기본적으로 각 적을 처음 만들면 게임에서 사용하기 위해 복제 할 수 있습니다. 최소한 이것은 파일 시스템 상호 작용 (텍스처로드 등)을 줄여야합니다.

+0

나는 이해하지 못한다고 생각합니다. "복제"과정이 집중적으로 진행되는 것이 아니라 국가를 구하기도합니까? 또한 이와 같이 비교적 간단한 2D 게임의 경우 적절한 CPU 사용이 장치에 무엇이라고 말할 수 있습니까? – Sam

+0

적을 만들 때마다 파일 시스템에서 텍스처를 다시로드한다고 가정합니다. 파일 시스템 상호 작용은 대개 느립니다. 프로토 타입을 작성하고 단 한 번로드하고 적을 복제해야 할 때마다 복제하면 더 신속한 메모리 상호 작용으로 줄일 수 있습니다. 또는 모든 텍스처를 정적 클래스로 미리로드 할 수 있으므로 더 간단한 방법 일 수 있습니다. –

+0

또한 노드 수 (SKScene의 속성)를 확인하여 노드가 제대로 제거되는지 확인해야합니다. –