2017-10-10 10 views
1

저는 기초적인 입자 시스템 인 iOS11/Swift4에서 PhysicsWorld를 사용하여 간단하고 많은 바디 (800) 2x2 픽셀 SpriteKit 시뮬레이션을 실행했습니다.스레드 할당 불일치 iOS11/Spritekit/Physicsbody low FPS를 의미합니다

단순한 반경 중력 노드가 포함되어 있으며 충돌이나 접촉 감지없이 궤도를 선회하는 800 개의 객체가 있습니다.

내 테스트 하드웨어에서 iPhone6S - 나는 60FPS를 달성하고 매우 매끄러운 시뮬레이션에 깊은 인상을 받았으며 훨씬 더 많은 탐색을위한 길을 열었다.

필자가 해본 유일한 문제는 성능이 실제로 일관성이 없다는 것입니다.

중력 노드의 필드 강도를 높은 중간 실행 (객체가 훨씬 더 빠르게 움직이는 것을 의미 함)으로 전환하면 실행의 약 25 %에서 시뮬레이션에서 60FPS의 문제는 발생하지 않지만 나머지 3 개에서는 4 번 실행하면 프레임 속도가 3-4FPS로 떨어집니다.

낮은 필드 강도 (느린 동작)로 되돌리려면 항상 60FPS가됩니다. 그리고 때로는 3 또는 4 스레드가 60 FPS를주는 응용 프로그램에 주어 지지만, 다른 시간은 단 하나의 스레드가 작업에 부여되는 볼 수 있습니다 - - 내가 엑스 코드의 프로파일 링 한

혹 투성이의 성능을 의미

그랜드 센트럴 디스패치 (Grand Central Dispatch) 및 스레드 우선 순위를 실험했는데 아무 소용이 없습니다. 각 프레임을 실행하는 유일한 코드는 어쨌든 PhysicsWorld 뿐이지 만 프레임과 프레임 간에는 아무 것도 없습니다.

내 생각에 일관된 60FPS를 얻을 수있는 방법은 무엇입니까? 하드웨어가 분명히 가능하기 때문에 그렇습니다.

추가 참고 사항 : 장치가 dev Mac/충전/USB/XCode 실행 등 -에 연결되어있는 경우 성능은 자주 사용되는 모든 스레드에서 양호합니다. 하지만 똑같은 응용 프로그램을 사용하여 다음 날에 장치 (독립 실행 형 장치에 연결되어 있지 않음)에서 독립 실행 형 - 거의 항상 매우 성능이 좋지 않음 - 전담 팀장을 말하십시오.

답변

0

노드에 대한 성능 문제는 물리 구조체를 사용할 때 공통적인데, 물리 본문을 사용하면 사용자 정의 본문 대신 표준화 된 본문을 사용합니다. 희망이 도움이됩니다.