particle/using action function

2023. 3. 14. 19:19cocos2dx

//다음에 불꽃처리 + fadeout처리 + 삭제처리
if (smallPics[i] != nullptr)
{
smallPics[i]->runAction(FadeOut::create(0.7f));
auto childs = smallPics[i]->getChildren();
for (int i = 0; i < childs.size(); i++) childs.at(i)->runAction(FadeOut::create(0.7f));
auto fireEffect = ParticleSystemQuad::create("fire.plist");
fireEffect->setPosition(smallPics[i]->getPosition());
fireEffect->setAutoRemoveOnFinish(true);
this->addChild(fireEffect, 3);
}


fire.plist 는 http://particle2dx.com/ 에서 미리 만들어 둔 불꽃 파티클

파티클을 추가할때 그냥 particlesystem으로 생성하면 안되고

반드시 particlesystemquad로 생성해야 되더라...

저거 지속시간은 대충 0.7초일거고 아마, auto remove on finish를 했으니 다 타면 사라지겠지





auto scaleTo = ScaleTo::create(0.4f, 1.0f);
auto fadeIn = FadeIn::create(0.4f);
auto spawn = Spawn::createWithTwoActions(scaleTo, fadeIn);
auto delay = DelayTime::create(0.05f * i);
auto seq = Sequence::create(delay, spawn, nullptr);
spr->runAction(seq);


Spawn은 2개 이상의 action을 합치기(동시 수행)
Sequence는 순차적으로 action을 합치기(순차적 수행)

CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(HelloWorld::deleteSmallPic, this));
this->runAction(Sequence::create(delay, runCallback, nullptr));

void HelloWorld::deleteSmallPic() {}

CallFunc으로 action에 콜백함수를 만들어서 링크시켜 줄 수 있다





-------추가-------


CallFuncN

메소드를 호출하면서 액션을 실행하는 주체를 넘겨줌. 

MoveTo *action_0 = MoveTo::create(1.0f, Point(200, 200));
CallFuncN *action_1 = CallFuncN::create(CC_CALLBACK_1(HelloWorld::goCall, this))
Sequence *action_2 = Sequence::actions(action_0, action_1, NULL);
spr->runAction(action_2); 

void HelloWorld::goCall(Node *pSender) {
    Sprite *spr = (Sprite *)pSender;
    spr->setScale(2);
}



CallFuncN

메소드를 호출하면서 주체 및 특정한 값을 넘겨줌

MoveTo *action_0 = MoveTo::create(1.0f, Point(200, 200));
CallFuncN *action_1 = CallFuncN::create(CC_CALLBACK_1(HelloWorld::goCall, this,(void*)"cocos2d-x"));
Sequence *action_2 = Sequence::create(action_0, action_1, NULL);
spr->runAction(action_2); 

void HelloWorld::goCall(Node *pSender, void *d) {
    CCLOG("goCall %s", (char*)d);
    Sprite *spr = (Sprite *)pSender;
    spr->setScale(2);
}


이렇게 쓸 수도 있대


CallFunc 액션과 함께 사용되는 콜백함수는 무조건 CC_CALLBACK_0 입니다.
그리고 CC_CALLBACK_0 에서 타겟 다음으로 입력한 매개변수는 개수에 상관없이 무조건 전달됩니다.

CallFuncN 액션과 함께 사용되는 콜백함수는 무조건 CC_CALLBACK_1입니다.
이것도 역시 타겟 다음으로 입력한 매개변수는 개수와 상관없이 무조건 전달합니다.

'cocos2dx' 카테고리의 다른 글

좌우가 연속되는 배경 횡스크롤  (0) 2023.03.14
애니메이션 재생후 셀프삭제, using schedule, CardinalSpline  (0) 2023.03.14
clipping node  (0) 2023.03.14
async loading  (0) 2023.03.14
save screenshot  (0) 2023.03.14