2012-04-19 4 views
1

책에서 breakout game 튜토리얼을 끝 냈지만 20x20 픽셀 이미지 인 공은 프레임을 건너 뛰고 아주 부드럽게 움직이지 않았습니다. Simulator와 iPhone 4S (실제)의 경우입니다. 코드는 NSTimer (속도가 느릴 수 있음)을 사용하지 않았지만 CADisplayLinkUIImageView setFrame을 사용하여 애니메이션을 수행했습니다.Cocos2D 및 OpenGL ES를 사용하여 iOS에서 Core Animation을 사용할 수 있습니까?

iOS의 코어 애니메이션은 개발 애니메이션 유형의 게임에 적합하지 않습니까? 이 (튜토리얼에서 게임 등)

  1. 인베이더 (Space Invaders)
  2. 브레이크 아웃의 게임
  3. Arkanoid의
  4. 화가 조류/컷 더 로프가/과일 닌자
경우 말

이러한 유형의 게임의 경우 코어 애니메이션은 위의 글쓰기 (2)에 정말 적합합니까? (1), (3) 및 (4)의 경우 Cocos2D 또는 OpenGL ES가 작업을 수행하는 것이 더 적합합니다. Cocos2D와 OpenGL ES의 성능은 매우 비슷합니다. 그게 사실이야?

답변

3

Cocos2D는 충돌 감지 및 스프라이트 애니메이션, 프레임 별 프레임, 스케일링 및 게임 개발에서 흔히 볼 수있는 다른 프로세스와 같은 일반적인 게임 논리를 프로그래밍하기 쉽기 때문에 종종 보입니다. 결합한 다음 순서를 정하고 콜백 등을 수행 할 수 있습니다. 이것이 엔진의 큰 장점 중 하나입니다.

그러나 성능은 또 다른 것입니다. Cocos는 모든 그래픽 요소를 하나의 OpenGL 호출로 결합하는 배치 노드를 제공합니다. 각 노드는 각 프레임에서 각각 별도로 화면에 "그림"하지 않고, 특히 큰 그래픽의 경우 성능이 크게 향상 될 수 있습니다. 프레임을 건너 뛰는 경우 Cocos의 배치 스프라이트가 누락 된 링크 였는지 궁금합니다.

저는 Core Animation에 깊은 인상을 받았으며 게임의 퍼포먼스 이슈에 대해 스스로를 가질 수 있기를 희망합니다. CA는 Cocos와 마찬가지로 OpenGL ES를 기반으로 구축되었으므로 좋은 결과를 얻을 수있을 것으로 기대합니다. 게임 개발을 위해 내부적으로 설계되고 최적화 되었기 때문에 코코스에서 그렇게하는 것이 더 쉽습니다.

0

2D 응용 프로그램 성능 문제가있는 경우 OpenGL로 전환하면 해결할 수있는 것과는 달리 CoreGraphics에서 가장 효율적인 결과를 얻는 방법에 대한 이해가 부족하기 때문일 수 있습니다. 2D 게임은 CoreGraphics에서 제대로 작동하므로 올바른 접근 방식으로 시작하면됩니다. 먼저, 각 CADisplayLink 콜백에서 전체 뷰를 다시 렌더링하지 않아야합니다. 대신, 여러 CALayer 개체가 포함 된 UIView를 설치하십시오. 레이어를 CALayer.contents = (id) cgImage와 같이 설정 한 다음 x, y 또는 animation 요소가 변경 될 때 시스템에서 렌더링을 처리하도록합니다. 요소를 배치하고 요소를 움직이는 애니메이션을 정의하면됩니다. 이러한 접근 방식을 통해 시스템은 장면 뒤에서 그래픽 카드에 애니메이션 이미지를 캐시하고 GPU 작업을 사용하여 다시 그립니다.

관련 문제