2009-06-17 4 views
1

보드 모양으로 화면을 채우는 56 개의 육각형 조각을 표시하는 게임을 씁니다. 현재 조각을 그리기 위해 호출 할 때 전달 된 좌표를 기준으로 6 점에서 경로를 만드는 싱글 톤 렌더링 클래스를 사용하여 각 조각을 그립니다.이 경로는 단색으로 채워지고 다음으로 알파가있는 59x59 png로 채워집니다. 흰색 그라디언트가 드로잉 위에 오버레이되어 조각에 반짝이는 모양을줍니다. 참고 현재 Core Graphics에서이 작업을 수행하고 있습니다.iPhone에서 2D 그림을 최적화하는 데 도움이 필요합니다.

첫 번째 생각은 내가 그릴 때마다 경로를 만드는 것이 값 비싸며 어떻게 든이 작업을 한 번 수행 한 다음 다시 사용할 수있는 것처럼 보이지만이 작업을위한 최선의 방법은 확실하지 않습니다. Shark의 병목 현상을 보았을 때, PNG의 그림이 그 과정에서 가장 세금이 많이 드는 부분 인 것처럼 보입니다. 나는 단순히 png 오버레이를 렌더링하거나 오버레이없이 경로를 렌더링 해 보았습니다. 둘 다 PNG 오버레이를 제거하면 대부분의 프레임이 생성되지만 일부 프레임 이득을 얻습니다.

나의 현재 생각은 6 개의 경로 (각 색상 조각에 대해 1 개)를 렌더링하고 png로 오버레이 한 다음이 조각의 이미지를 저장 한 다음 필요할 때마다 조각을 다시 그려야한다는 것입니다 그들. 한 번 그려서 다시 그려 넣은 것을 저장하는 효과적인 마카니즘이 있습니까? 좀 이상하게 들릴지 모르겠지만 비슷한 일을하는 덜 세금이 부과되는 방법이있을 수 있습니다 ...

어떤 제안이라도 대단히 감사합니다. 감사합니다.

답변

1

CGLayer 또는 CALayer을 시도해보십시오.

+0

고마워요! CGLayer는 문서별로 최상의 선택을합니다. "CGLayer 객체를 사용하면 성능이 향상 될 수 있습니다. 특히 동일한 축척 비율과 방향을 사용하여 반복적으로 스탬프 처리하는 드로잉 조각을 캡처해야하는 경우가 있습니다." – Skyler

1

일반의 생각 : 아이폰에

  • 게임 프로그래밍은 일반적으로 OpenGL은 필요로한다. Core Graphics는 사용하기가 좀 더 쉽지만 OpenGL은 속도에 최적화되어 있습니다.
  • 가능한 한이 "빛나는 모양"을 텍스처에 미리 렌더링하십시오 (예 : 프로젝트에 삽입하기 전에 포토샵에서 수행). 알파 블렌딩은 hell입니다.
  • iPhone의 GPU 제조업체에서 사용하는 형식이므로 PVRTC (이 또한 tutorial)으로 시도해보십시오. 그런 다음 다시 병목 현상이 발생하면 상황이 악화 될 수 있습니다.
1

정말 속도가 필요하면 OpenGL 경로를 따라야합니다. OpenGL과 Core Animation을 혼합하고 싶다면 충돌 할 수 있습니다.

OpenGL은 그다지 익숙하지 않은 경우 고통입니다. Core Animation을 사용하여 각 타일을 레이어로 만들 수있는 것 같습니다. CA는 사용자가 무언가를 변경하지 않는 한 다시 그리기를 호출하지 않으므로 대히트하지 않고 해당 계층을 이동할 수 있어야합니다. 또한 CA는 텍스처 메모리에 레이어를 저장하므로 훨씬 더 빨라야합니다.

1

cocos2d을보고 싶을 수도 있습니다. 내 테스트에서 CoreAnimation을 사용하는 것보다 훨씬 빠르며 게임에 유용한 많은 것들을 제공합니다.

+0

그래, 내 다음 프로젝트에서 시도해 볼 계획이다. 이것은 현재 프로젝트의 끝 부분에 있으며, 부분적으로 수용 할 수 없을만큼 뒤떨어져 있다는 것을 깨닫기 시작했다. – Skyler

관련 문제