2014년 7월 22일 화요일

cocos2d HD(retina) sprite sheet 적용하기

cocos2d 에서 기본적으로 이미지 리소스는 SD 로 적용 되는듯 하다.

아이폰 5 기준 해상도가 640x1136
기존에  레티나 아이폰이 아니던 시절 해상도는 320x480 이였다. 당시에 작성한 수도쿠9를 업그레이드 하는 과정에서 cocos2d를 적용하려고 하니 이런 저런 삽질에 연속이다.

일단 기존에 이미지 리소스를 두배 크기로 만들어야  HD(레티나) 용 리소스가 되는데
이게 cocos2d에서 레티나로 적용이 되지 않는다.

파일이름이 @2x 프리픽가 아니라 -hd 였다. 이것도 삽질 끝에 알아 냈다. 
나는 무슨 프로퍼티가 있는줄 알았다. ㅠ.ㅠ

CCSpriteFrame *image;
image = [CCSpriteFrame frameWithImageNamed:@"sblank-hd.png"];

이런식으로 코딩을 하니 hd 리소스가 적용된 스프라이트를 이용 할 수 있었다.

이미지 리소스가 많아지니 이걸 다루기가 어려워 알아 보니

sharedSSpriteFrameCache 메서드가 있고  프로퍼티 리스트 파일과 하나로 합쳐진
텍스쳐 이미지가 있으면 여러 스프라이트를 한번에 캐쉬에 불러 올 수 가 있다.

근데 이걸 수작업으로 하는 것이 아니라  이미지 툴이 있는데 그중에 Zwoptex 라는 앱이 있다.
이 앱을 이용하면 스프라이트 시트를 작성 할 수 있다.

이 앱의 사용 방법은 png 파일들을 모두 라이브러리에 넣고 publish setting에 plist 파일 명과 하나의 이미지로 저장될 texture이미지 파일명을 기술 해주고
Layout을 적당한 알고리즘으로 선택(작은 스프라이트 이미지 정렬)  한 후
Publish 버튼만 누르면 끝이다.


여기서 삽질이 시작되었다.

나는 이미 frameWithImageName:@ 를 이용해서 -hd.png 리소스 이름으로 HD이미지를 다루고 있었고 그 파일들을 라이브러리로 Zwoptex를 이용해서 만들었으니 당연히 HD로 처리 될 줄 알았는데...

결과 화면은 이미지가 두배 씩 뻥튀기 되면서 엉망이다.

결국 알고 보니 .plist 파일과 .plist파일에 정의된 하나의 texture png파일 이름도 -hd.plist , -hd.png가 되어야 하는 것이다. ㅠ.ㅠ

결국 삽질 끝에 알아 내서 수도쿠9 2.0에 스프라이트를 출력 할 수 있었다.