Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x中的CC_CALLBACK_0,1,2,3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Cocos2d-x 3.x版本用CC_CALLBACK_0,CC_CALLBACK_1,CC_CALLBACK_2和CC_CALLBACK_3的宏来定义回调方法类的。

3.x版本的例子:

child->runAction(Sequence::create(
                                    DelayTime::create(1.4f),CallFunc::create( CC_CALLBACK_0(CrashTest::removeThis,this)),nullptr)
             );

这里的含义就是child执行了一个Action,这个Action是一个队列,队列的第一个执行是一个延时操作,第二个执行是一个回调。意思就是经过1.4秒后调用this对象的removeThis方法。


CC_CALLBACK_0中有两个参数,第一个是要回调的方法名称,用类名加方法的形式,第二个参数是函数被调用的对象的指针,一般是this。

很多人认为CC_CALLBACK_0中的0是代表回调的removeThis方法的参数是0个的意思,其实并不是。

看下面的例子:

auto action = Sequence::create(
		Place::create(Vec2(200,200)),Show::create(),MoveBy::create(1,Vec2(100,0)),CallFunc::create( CC_CALLBACK_0(ActionSequence2::callBACk1,CallFunc::create( CC_CALLBACK_0(ActionSequence2::callBACk2,this,_grossini)),CallFunc::create( CC_CALLBACK_0(ActionSequence2::callBACk3,_grossini,0xbebabeba)),nullptr);
void ActionSequence2::callBACk1()
void ActionSequence2::callBACk2(Node* sender)
void ActionSequence2::callBACk3(Node* sender,long data)
这里的三个CC_CALLBACK_0的参数列表中,除了第一个回调的方法和第二个调用的对象,第二个CC_CALLBACK_0中多了一个参数_grossini,这个变量在回调ActionSequence2::callBACk2方法时作为参数使用,ActionSequence2::callBACk2(_grossini)。同样的ActionSequence2::callBACk3方法调用时的参数是_grossini和0xbebabeba,ActionSequence2::callBACk3(_grossini,0xbebabeba)。


CC_CALLBACK_0中的0是代表要回调的方法绑定第0个参数之后的参数。

ActionSequence2::callBACk2第0个后面的参数就是_grossini,那么_grossini就是第1个参数,调用就是ActionSequence2::callBACk2(_grossini)这个样子。


那么, 同样的道理CC_CALLBACK_1,2,3就代表回调的方法绑定第1,3个参数之后的参数。


我们再看个例子:

// Get 
    auto labelGet = Label::createWithTTF("Test Get","fonts/arial.ttf",22);
    auto itemGet = MenuItemLabel::create(labelGet,CC_CALLBACK_1(@R_450_10107@ClientTest::onMenuGetTESTClicked,falsE));
    itemGet->setPosition(LEFT,winSize.height - MARGIN - SPACE);
    menurequest->addChild(itemGet);
void @R_450_10107@ClientTest::onMenuGetTESTClicked(cocos2d::ref *sender,bool isImmediatE)
这里的CC_CALLBACK_1有三个参数,前两个就不多说了,第三个参数fasle就是回调函数onMenuGetTESTClicked中的第1个参数之后的参数,也就是第二个参数。


这个回调在调用的地方是这样:

_callBACk(this);
调用的时候只需要第一个参数,而第二个参数会被指定为false。

举一个很容易理解的例子:

int add (int a,int b)
{
return a+b;
}

auto func = CC_CALLLBACK_1(add,2);

cout << func(3) << endl; // 结果是 5
func是一个回调方法,默认指定了第二个参数是2,调用的时候只需要指定第一个参数就可以了。


说完CC_CALLBACK的用法,再看看CC_CALLBACK这个宏的定义:

// new callBACks based on C++11
#define CC_CALLBACK_0(__SELEctor__,__target__,...) std::bind(&__SELEctor__,##__VA_ARGS__)
#define CC_CALLBACK_1(__SELEctor__,std::placeholders::_1,##__VA_ARGS__)
#define CC_CALLBACK_2(__SELEctor__,std::placeholders::_2,##__VA_ARGS__)
#define CC_CALLBACK_3(__SELEctor__,std::placeholders::_3,##__VA_ARGS__)
C++11引入了boost库的function和bind,bind也被3.x版本用来作为回调的绑定。

__SELEctor__是绑定回调的方法

__target__是调用方法的对象

##__VA_ARGS__是可变的参数列表

std::placeholders::_1是占位符

std::placeholders::_2同上是占位符

大佬总结

以上是大佬教程为你收集整理的Cocos2d-x中的CC_CALLBACK_0,1,2,3全部内容,希望文章能够帮你解决Cocos2d-x中的CC_CALLBACK_0,1,2,3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。