창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
글 수 185
오늘에서야 안 것인데,
cocos2d에는 가비지 컬렉터가 존재한다.
스프라이트를 생성하고 Node에 연결하지 않으면,
얼마 후 가비지 컬렉터가 이를 지워 버린다.
스프라이트를 생성하면 바로 Node에 연결해줘야 한다는 것이다.
내 경우, 게임 중에 메모리 할당을 하는 것은 조금이라도 속도에 영향을 준다고 생각해서
스테이지 로딩 시에 미리 스프라이트들을 생성,
플레이 중에는 이를 처리하느냐 마느냐를 나타내는 플래그만 조절함으로
빠른 속도로 스프라이트가 나타나고 사라지게 만들었다.
하지만 가비지 컬렉터가 존재하기 때문에 노드에 연결해 놓지 않으면 사라져 버리고,
노드에 연결하면 화면에 보이고, 업데이트 부분에서 처리되기도 한다.
물론 위치를 화면에서 아주 밖으로 줘서 보이지 않게 하거나,
특별 처리 코드를 추가하는 방법도 있지만,
쓸데없이 코드가 복잡해지고, 복잡해짐 = 버그 발생율 증가이므로 그다지 마음에 들지 않는다.
가비지 컬렉터를 OFF시키는 옵션이 있을지는 모르겠지만,
메모리 관리상 있는게 깔끔할 것 같기도 하고,
크게 속도에 영향을 안 미친다면 그냥 생성해서 바로바로 노드에 붙여주는 식으로 만드는 게
Cocos2d에서는 순리인 듯 하다.
이걸 몰라서 만들어 둔 스프라이트들이 사라지는 바람에
어디서 에러나는지 이해를 못하고 몇시간을 헤멨다.