it’s simple in cocos2d-ios by using CCCallBlock
[hw runAction: [CCSequence actions:[CCScaleTo actionWithDuration:1.0f scale:3.f], [CCCallBlock actionWithBlock: ^{ [hw setScale:1.f]; }], nil];
but it’s cumbersome in order to implement that in cocos2d-x
we need to use some C++ techniques.
I got the idea from this link : http://www.cocos2d-x.org/boards/6/topics/15864?r=15921#message-15921
you can write short-code if you use to KSFuncHelper or helper-macro
hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFuncHelper::create([=](CCNode* VARNAME){VARNAME->setScale(1.0f); })));
or
hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFuncN(node, {node->setScale(1.0f);}) ));
In short,
CCCallFunc
hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFunc( { CCLog("test"); }) ));
CCCallFuncN
hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFuncN(obj, {obj->setScale(1.0f);}) ));
CCCallFuncO
hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFuncO(hw, obj, {((CCMenuItem*)obj)->setScale(1.0f);}) ));
CCCallFuncND
void* test = (void*)0x3; hw->runAction(CCSequence::actionOneTwo(CCScaleTo::actionWithDuration(1.0f, 3.f), KSFuncND(test, node, voidname, { int* t = (int*)voidname; CCLog("%x", t); node->setScale(1.0f); }) ));
KSBlock.h.zip (0.8 KB)
KSBlock.h.zip (0.8 KB)