2010-12-21 2 views
2

저는 iPhone 게임을 만들고 UIView 개체를 사용하여 스프라이트를 그립니다. 대부분의 경우 성능에 문제가 없습니다. 그러나 화면에 약 15-20 개의 객체가 있으면 (그 중 5 명이 움직일 수도 있습니다.) 게임은 특히 iPhone 3G에서 상당히 느려집니다. 프레임 속도는 초당 단일 프레임만큼 떨어질 수 있습니다.성능 문제가 발생하기 전에 iOS에서 동시에 얼마나 많은 UIView를 표시 할 수 있습니까?

이것은 단지 UIView 개체의 제한 사항입니까, 아니면 iOS가이 많은 UIView 개체를 동시에 화면에서 처리 할 수 ​​있어야합니까?

문제를 분리하기 위해, 나는 매우 간단한 그림 그리기를 만들었습니다 - 빨간색 사각형을 그립니다. drawRect은보기 당 한 번만 호출됩니다. 뷰 계층 구조는 매우 간단하고 얕습니다. 모든 프레임에 UIView 위치를 업데이트하려면 CADisplayLink을 사용하고 있습니다.

그 밖의 경우는 거의 없으므로이 번호의 UIView 개체를 사용하여 다른 사람이 성공했는지 알고 싶습니다.

답변

3

내 문제의 핵심은 내 게임 콘텐츠 상단에 레이블이 있다는 것이 었습니다. 라벨은 불투명하지 않으며 phix23에서 제안했듯이 문제의 큰 부분이었습니다.

큰 차이를 만든 첫 번째 일은 콘텐츠 상단에있는 초당 프레임 수를 제거하는 것이 었습니다. 모든 프레임에서 내용이 변경된 레이블을 사용하면 속도가 많이 느려졌습니다.

레벨 업시 게임의 대부분 위에 표시되고 모양이 변경된 큰 라벨이 있습니다. 모든 것을 다룰 때이 라벨을 그리는 것이 많은 감속을 초래한다는 것이 밝혀졌습니다.

원래 질문에 대한 답변으로 iPhone 3G에서 동시에 약 30-40 개의 불투명 UIView와 2 ~ 3 개의 불투명 뷰를 동시에 지원할 수 있다는 것을 알았습니다. 크기, 모양 또는 위치를 변경하는 불투명하지 않은 UIView는 훨씬 최악이며 화면의 상당 부분을 차지하는 UI 중 하나라도 신속하게 문제를 일으킬 수 있습니다.

0

같은 유형의 응용 프로그램에는 CoreGraphics/Quartz/OpenGL을 사용해야하지만 어쨌든 그러한 낮은 개수에는 제한이 없다고 생각합니다. 예를 들어 9 개의 행이있는 테이블 뷰가 있고 각 행에 5 개의 하위 뷰가있는 경우 해당 뷰는 수용 가능한 빠름을 표시합니다. 보기에서 위치를 변경하려면 UIView 애니메이션을 사용해 보셨나요? 학습의 OpenGL에서

행운)이 심각하게 도면 뷰의 속도에 영향을 미친다는 것을

+0

저는이 시점에서 드로잉 시스템을 변경하기위한 대규모 점검을 피하기 위해 노력하고 있습니다. =/ UIView 애니메이션을 사용하려고했지만 도움이되는 것처럼 보였습니다.하지만 중반 애니메이션을 중단하고 보간 된 속성 값에 액세스 할 수 없다는 등의 어려운 제한 사항이있었습니다. –

+0

하지만 animationFromCurrentState를 YES로 설정할 수 있으며 이전 상태 인 –

+0

에서 새 애니메이션을 계속 실행하지만 UIView를 터치하고 애니메이션이 진행되는 동안 응답 할 수 있어야합니다. UIView의 애니메이션 중에는 현재 애니메이션이 적용된 위치에서 응답하지 않으며 최종 도착 위치에서 터치 이벤트에 응답합니다. –

3

당신이 NO 각보기의 opaque 속성을 설정하는 경우, 명심하십시오. 보기가 투명하지 않은 경우 기본값 인 YES으로 설정해야합니다.

+0

나는 모든 것이 불투명하게 YES로 설정되어 있으므로 이것이 문제라고 생각하지 않는다. 다른 사람들이 불투명도가 큰 차이를 만들 수 있다고 말하지만, 내 자신의 테스트에서 눈에 띄지 않는 차이는 보이지 않았으므로 병목 현상이 의심됩니다. –

관련 문제