[D_005] Call Function DATA_OLD/Cocos2d-x 기능성 게임 개발과정2014. 11. 17. 16:25
CallFunc란?
Action이 아닌 함수적 동작을 Action처럼 쓸 수 있게 해주는 기능.
spr1->runAction(Sequence::create(
MoveTo::create(3.0f, Vec2(380, 100)),
CallFunc::create(CC_CALLBACK_0(HelloWorld::callfuck, this)),
NULL
));
+ 여기서 CC_CALLBACK_0은 자동으로 넘기는게 없는 거지, 호출하는 함수가 파라미터가 없다는게 아니다. CC_CALLBACK_0은 단지 호출 객체를 Ref* sender로 넘겨주지 않을 뿐이지, 다른 파라미터는 가질 수 있다.
+ CallFuncN이 들어가면 뒤에는 CC_CALLBACK_0말고 다른거(1, 2, 3, 4)가 들어간다.
spr1->runAction(Sequence::create(
MoveTo::create(3.0f, Vec2(380, 100)),
CallFuncN::create(CC_CALLBACK_1(HelloWorld::callFuckN, this)),
NULL
));
//callFuckN에게 spr1을 인자로 넘겨줌
+ 이렇게 CC_CALLBACK_1을 쓰면, CC_CALLBACK_1을 통해서 불려지는 함수에게 파라미터로 함수를 부르는 자기 자신(Ref* sender)을 넘겨준다. (?)
틀린 경우
spr1->runAction(Sequence::create(
MoveTo::create(3.0f, Vec2(380, 100)),
CallFuncN::create(CC_CALLBACK_0(HelloWorld::callFuckN, this, 1208)),
NULL
));
void HelloWorld::callFuckN(Ref* sender, int score)
{
CCLOG("Call Fuck %d!", score);
auto spr = (Sprite*)sender;
spr->runAction(ScaleTo::create(1.0f, 2));
}
이러면, CC_CALLBACK_0이기 때문에, 자동으로 Ref* sender로 넘겨주는 값이 없기 때문에 컴파일단계에서 에러가 난다.(callFuckN 내부 두번째에서 에러)
이때,
CallFuncN::create(CC_CALLBACK_0(HelloWorld::callFuckN, this, 1208)), NULL
부분을
CallFuncN::create(CC_CALLBACK_0(HelloWorld::callFuckN, this, spr1, 1208)), NULL
로 해주면, 자연스럽게 spr1이 Ref* sender로 넘어가기 때문에 문제없이 실행된다.
'DATA_OLD > Cocos2d-x 기능성 게임 개발과정' 카테고리의 다른 글
[D_007] Touch event (0) | 2014.11.19 |
---|---|
[D_006] 비행기 게임 예제 (0) | 2014.11.19 |
[D_005] Action - Sequence, Spawn, DelayTime, Repeat, Ease (0) | 2014.11.17 |
[D_005] Basic Action - Scale, Rotate, Blink, Fade, Tint (0) | 2014.11.17 |
[D_005] Basic Action - Move, Jump, Bezier, Place (0) | 2014.11.17 |