cocos2dx3.0的CCCallFunc、CCCallFuncN

来源:

http://blog.csdn.net/crayondeng/article/details/18767407

 

 

二、在cocos2d-x中,还有一个地方是需要大量使用到回调函数的,这就是回调动作:CCCallFunc、CCCallFuncN、CCCallFuncND、CCCallFuncO。

但是这四个回调动作在 3.0 版本中已经都提示 deprecate 了。那么在3.0 版本中已经只剩下 CallFunc 和 CallFuncN.

其中:CallFuncND 和 CallFuncO 都可以通过 CallFunc 和 CallFuncN 进行实现。

1、CallFunc

  1. static CallFunc * create(const std::function<void()>& func);  

CallFunc的官方例子:(我也是照copy的喔

// in v2.1

     CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );

// in v3.0 (short version)    

     auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this)); 

     auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));

 

// in v3.0 (long version) 

     auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this)); 

     auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));  

// in v3.0 you can also use lambdas or any other "Function" object

     auto action1 = CallFunc::create(  [&](){  

     auto s = Director::sharedDirector()->getWinSize();

     auto label = LabelTTF::create("called:lambda callback",     "Marker Felt", 16);  

     label->setPosition(ccp( s.width/4*1,s.height/2-40)); 

     this->addChild(label);  

     }  );   

 

2、CallFuncN

[cpp] view plain copy 

static CallFuncN * create(const std::function<void(Node*)>& func); 

 注意到该回调动作带有一个Node*参数

假设回调函数:

   void ActionCallFuncN::callback(Node* sender )  

 

     例子:

   2.0调用:

 auto action = Sequence::create( MoveBy::create(2.0f, Point(150,0)), CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),NULL);  

 3.0中的lambda调用

 auto action = Sequence::create(MoveBy::create(2.0f, Point(150,0)),  

      CallFuncN::create([&](Node* sender){  

        //回调动作代码

       // sender :谁调用CallFunN 就代表谁

     }),NULL); 

 

================================================================

================================================================

受益于C++11的新语法特性 std::bind  CallFuncND 和 CallFuncO 都可以通过 CallFunc 和 CallFuncN 进行实现

 

1、CallFuncND :回调动作中带有一个Node*参数一个void*参数

实现过程类似于 CallFuncN  

假设回调函数是 :

void ActionCallFuncND::doRemoveFromParentAndCleanup(Node* sender, bool cleanup)

那么在回调动作中:

CallFuncN::create( CC_CALLBACK_1(ActionCallFuncND::doRemoveFromParentAndCleanup, this, true))

这样就实现了等价于 CallFuncND 的回调动作。

 

2、CallFuncO :回调动作中带有一个Object*参数

实现过程类似于 CallFunc 

假设回调函数是: void ActionCallFuncO::callback(Node* node, bool cleanup)

那么在回调动作中:

CallFunc::create( CC_CALLBACK_0(ActionCallFuncO::callback, this, _grossini, true)

这样就实现了等价于 CallFuncO  的回调动作。

 

 

原文链接: https://www.cnblogs.com/liangtf/p/6245433.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    cocos2dx3.0的CCCallFunc、CCCallFuncN

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/246961

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午1:54
下一篇 2023年2月14日 上午1:55

相关推荐