2017-12-25 5 views
1

내 앱을 프로파일 링하는 동안 약간 혼란 스럽습니다. 나는 CPU 사용량이 증가함에 따라 그 이유를 알 수 없었다. 플레이어가 유휴 상태 일 때에도 겉으로보기에는 72 %의 CPU 사용량이있는 것으로 보입니다 [SKScene _update:] 내 게임이 차례대로 진행되므로 내 업데이트 기능이 비어 있습니다. 왜 그렇게 많은 일이 벌어 질까요?비워두면 업데이트 기능이 85 %의 시간이 걸리는 이유는 무엇입니까?

팁을 주시면 감사하겠습니다.

주요 게임 맵은 UI와 헥스 기반 SKTileMapNode입니다 :

override func update(_ currentTime: TimeInterval) { 
    // Called before each frame is rendered 
} 

추가 정보 :이 말했다 될 필요가 경우

enter image description here

이 내 업데이트 방법 SKCameraNode을 사용하여 그려집니다. UI는 약 30 개의 노드로 이루어져 있습니다. SKLabelNodeSKSpriteNode 사용자가 차례를 끝낼 때마다 별도의 스레드에서 실행되는 AI가 있습니다. AI가 실행되면 메인 스레드 CPU 사용량이 위의 이미지와 같이 즉시 떨어집니다. AI가 GKMinMaxStrategistbestMoveForPlayer() 기능 만 실행하기 때문에 이상합니다.

답변

1
수동 회전에서 다시 update(_:)를 호출 update(_:)를 호출 할 수있다

, 당신은 빈 구현을 경우에도 장면을 업데이트 할이 메소드를 오버라이드 (override) 해야합니다. 장면의 SKSceneDelegate을 설정했는지 확인하십시오.

이 메서드를 직접 호출하지 마십시오. 장면이 뷰에 표시되고 일시 중지되지 않는 한 프레임 당 정확히 한 번 호출됩니다 ( ). 기본적으로이 메서드는 아무 작업도 수행하지 않습니다. 장면 하위 클래스는 이 메서드를 재정의하고 장면에 필요한 모든 업데이트를 수행해야합니다.

당신은/일시 정지 수동으로 뷰를 재개 할 수 있습니다

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    guard let view = view else { 
     return 
    } 

    view.paused = !view.paused 
} 
+0

내가 가장 확실히 무시했다 갱신 빈을 떠났다. 또한 SKSceneDelegate는 정확히이 작업과 관련이 있습니까? – Aleksandr

+0

모든 장면 처리 메소드는 관련 코드없이 'SKSceneDelegate'를 사용하여 위임 할 수 있습니다. 사용자가 자신의 대리자를 서브 클래 싱하고 구현하는 것은 말할 수 없습니다. 플레이어의 차례가 끝나면보기를 일시 중지하고 시작하기 전에 업데이트하십시오. – RLoniello

+0

그래서 'SKSceneDelegate'로 아무 것도하지 않겠습니다. 나는 그것에 접근하지 않거나 그 기능을 사용합니다. 수동으로'update'를 호출 할 곳이 없으며 뷰를 일시 중지하면 사용자가 아무런 움직임도 만들 수 없으므로 목적을 무효로합니다. – Aleksandr

관련 문제