cocos2d-x로 게임을 만들수록 새로운 기능들을 알게 되는데
이번에 새로 알게된 좋은 기능이 있어 소개합니다.
(이미 아는 분들도 있겠지만 ^^ 혹시 저처럼 몰라서 힘들게 돌아가는 길을 택한 분들께 바칩니다.)
애니메이션을 구현하다 보면 노드에 액션을 주고 액션이 끝났을 경우 그 노드를 삭제해야 하는 경우가 있습니다.
어제 까지만 해도 항상 시퀀스를 사용해서 마지막 시퀀스 파라메터에 콜백함수를 주고 노드를 넘겨 삭제를 했었습니다.
(참 바보 같죠 ㅠ_ㅠ)
예를 들어 아래와 같이 구현 했었죠.
void SceneGame::animateBlockMoveDown() // 애니메이션 구현
{
auto node = Node::create();
auto actionMove = MoveTo::create(0.3f, Vec2(100, 100));
auto callbackFunc = CallFuncN::create(CC_CALLBACK_1(SceneGame::callbackBlockMoveDownEnd, this));
auto actionSeq = Sequence::create( actionMove, callbackFunc, NULL);
node->runAction(actionSeq);
}
void SceneGame::callbackBlockMoveDownEnd(cocos2d::Ref *ref) // 노드 삭제 처리
{
auto node = dynamic_cast<Node*>(ref);
node->removeFromParentAndCleanup(true);
}
문제가 있는 코드는 아닙니다.
콜백함수에서 애니메이션이 끝난 뒤 다른 처리를 하지 않고 노드삭제 처리만 할 거라면
콜백함수를 만들어야 하는 귀차니즘과 모든 액션에 콜백을 만들어야 한다면 소스코드 또한 지저분해질수 있습니다.
(콜백 함수만... 20개...모두 액션 삭제처리만...물론 노드 삭제처리 콜백 함수 하나만 만들어도 됩니다. ^^)
좀더 깔끔하고 멋진 코드를 위해 사용 하시면 좋을 것 같습니다.
RemoveSelf 액션 함수 사용법에 대해 알아 볼께요.
void SceneGame::animateBlockMoveDown() // 애니메이션 구현 및 노드 삭제 처리
{
auto node = Node::create();
auto actionMove = MoveTo::create(0.3f, Vec2(100, 100));
auto actionRemove = RemoveSelf::create();
auto actionSeq = Sequence::create( actionMove, actionRemove, NULL);
node->runAction(actionSeq);
}
위 대로 하면 애니메이션 구현 및 노드 삭제처리를 한번에 할 수 있습니다.
update 함수를 보면 아래와 같이 구현 되어 있습니다.
void RemoveSelf::update(float time)
{
CC_UNUSED_PARAM(time);
_target->removeFromParentAndCleanup(_isNeedCleanUp);
}
removeFromParentAndCleanup기능을 하는 액션인거죠. ^^
파라메터로 cleanup 여부를 전달 할 수 있는데 Default가 true로 되어 있습니다.
static RemoveSelf * create(bool isNeedCleanUp = true);
이편한걸 이제야 알았다는게 조금 힘드내요. ^^
사용한지 아직 하루 밖에 안되어서 무슨 문제가 있는지 모르겠지만
문제점을 알고 계신 분은 코멘트 남겨주세요.
감사합니다.
'- cocos2d-x ' 카테고리의 다른 글
[ cocos2d-x 3.8.1 ] Label TTF Fontsize 변경 방법 및 AutoFontSize 방법 (2) | 2015.11.13 |
---|---|
[ cocos2d-x 3.8.1 ] 3.6에서 3.8.1로 업데이트 할 때 문제 발생 (0) | 2015.11.07 |
[ cocos2d-x 3.8 ] cocos2d-x 3.8 버전 사용시 문제점 (0) | 2015.10.25 |
[ cocos2d-x 3.6 ] 간단하게 사용 가능한 Plugin SDKBOX 소개 (0) | 2015.08.30 |
[ cocos2d-x 3.6 ] 간단하게 모달 레이어 만드는 함수 (1) | 2015.08.28 |