using CCCallFuncSeries without new-member-function in C++

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)

You can use my CCCallBlock if you have enabled c++11.

https://gist.github.com/4423027

Le Yang wrote:

You can use my CCCallBlock if you have enabled c++11.
>
https://gist.github.com/4423027

Thanks,

Could you tell me how to use CCCallFuncN via CCCallBlock?

The CCCallBlock takes no param. You can write a CCCallBlockN (according the implementation in cocos2d-iphone) by changing block type to function<void(cocos2d::CCNode *node)> &block, and execute func to

void CCCallBlock::execute() {
    _block(m_pTarget);
}

Le Yang wrote:

The CCCallBlock takes no param. You can write a CCCallBlockN (according the implementation in cocos2d-iphone) by changing block type to function<void(cocos2d::CCNode *node)> &block, and execute func to
[…]

Thanks