태그 : CCSpriteFrameCache

아이폰 개발 팁 - cocos2d의 CCSpriteFrameCache 에서 plist 제거하기

cocos2d에서 텍스쳐를 효율적으로 사용하기 위해서는 

CCSpriteFrameCache를 이용해서 plist로 관리를 하게 됩니다.


그런데, 더 이상 사용하지 않을 plist는 제거를 해두면 되는데..

명시적으로 plist를 제거했음에도 깔끔하게 제거가 안되고 메모리를 계속 차지하고 있더군요.

그래서, 삽질을 좀 하다가 코드를 보니..


CCSpriteFrameCache에 추가할때 CCTextureCache에 texture를 등록하는데 제거할 때는 그냥 두더군요.

아마 다른데서 계속 사용하라는 배려인거 같은데..

plist 통째로(모든 스프라이트 포함이겠죠) 명확히 필요가 없는 시점에서는 

아래와 같이 두 cache에서 모두 제거를 해야 메모리가 정확히 해제가 됩니다.


// plist추가!

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"test.plist"];



// plist 완벽 제거!

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"test.plist"];

[[CCTextureCache sharedTextureCache] removeTextureForKey:@"test.png"];


removeUnused...시리즈의 함수랑은 의미가 좀 다릅니다.

Run with Performance Tool - Allocations로 꼭 메모리 사용량 확인해 주는 센스~



by 쉬귀 | 2010/11/08 23:02 | 개발 | 트랙백 | 덧글(2)

Cocos2D에서 통짜 Sprite화일 쉽게 사용하는 법


sprite animation을 하려면 sprite가 많~~이 필요하다;
그냥 CCSprite로 한장 한장씩 로드해서 하면 힘들다; 개발자도 힘들고 아이폰도 힘들다;
CCSpriteSheet를 사용해서 통짜texture를 읽어놓고 좌표를 정의해서 사용할 수도 있으나,
각 frame별로 좌표를 잡으려다보면.. 먼저 머리 잡고 쓰러지는 수가 있다 -_-;

그래서!
Cocos2D에는 sprite frame animation을 하기 쉽도록 CCSpriteFrameCache를 제공한다.

뭘 하는 거냐면..
  • 각 프레임별 sprite가 통합된 한 장의 texture
  • 그 texture 안의 sprite의 정보(이름, 위치, 사이즈 등)를 담은 plist 화일을 한 큐에 읽고 관리해준다.
와! 좋다~~
그런데, 잠깐 고민을 하게 된다.. plist(Property List)는 어떻게 만들지??
읽는거는 자동이라고 해도 plist에 하나하나씩 입력할 수는 없지;; 힘드니까~

찾아보니.. 삽질하지 말라고 누가 다 만들어놨다. ㄱㅅㄱㅅ;

간단하게 적어보면,
  1. 각 sprite 프레임별로 이미지를 한장 한장씩 만들어서
  2. http://zwoptex.zwopple.com/ 를 띄우고
  3. import해서 
  4. 정렬하고 
  5. export하면 된다. 우왕굳~ :>

그리고, 버전업이 되면서 cache의 create..함수가 deprecate됐으니 저 위에 링크의 소스는 안되고 아래처럼 써야된다~
// CCSprite * blob = [cache createSpriteWithFrameName:@"blob_idle_01.png"];
CCSprite * blob = [CCSprite spriteWithSpriteFrameName:@"blob_idle_01.png"];

핵심은 CCSpriteFrameCache에서 plist를 읽고 나면, 
CCSprite에서 통합하기 전의 원본 화일 이름으로 접근해서 쓰면 되는 것~

자 그럼.. 2D 애니메이션의 세계로 ㄱㄱ~

by 쉬귀 | 2010/03/01 00:05 | 개발 | 트랙백 | 덧글(3)

◀ 이전 페이지 다음 페이지 ▶