在3.0RC2版本中,物理碰撞检测中调用CC_CALLBACK_2发生的错误

在网上下在了一份代码,我使用3.0的rc2进行编译,发现在物理碰撞检测的代码中,调用cc_callback_2函数会导致编译出错,代码如下:
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_2(GameLayer::onContactBegin, this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);

其中,在头文件中的定义为这样:bool onContactBegin(EventCustom event, const PhysicsContact& contact);
onContactBegin的实现就不贴了,这样在vs2012的环境中编译的时候,出现不能讲参数2从cocos2d::PhysicsContact转换为cocos2d::EventCustom
类型,如果我要是把改用CC_CALLBACK_1,并且把第一个参数EventCustom* event去掉,这样就是可以编译通过的,但是第二种情况,我在网上看到的其他代码,也并没有错误啊…现在这个问题有点疑惑,一个新手,直接学习的3.0+的版本.知道这个问题的,麻烦给一个提示,多谢。。

附加,我改成一个参数以后,运行起来,发现回调函数并没有被执行,查看了网上,大部分人都说在PhysicsBody中添加setContactTestBitmask(0xFFFFFFFF);这个东西,我添加了也没有效果。如果知道这个问题的,也随便给个参考…

你可以这样设
body->setCategoryBitmask(0x01);
body->setContactTestBitmask(0x01);

body1->setCategoryBitmask(0x01);
body1->setContactTestBitmask(0x01);

新人,同样遇到这个问题了…是什么情况能,有谁可以解答一下吗?

auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(GameSceneD::onAcceleration, this));
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

没人解释一下吗,同求

头文件里的声明是这样的
std::function<bool(PhysicsContact& contact)> onContactBegin;

只有一个参数的
我也是直接学的3.0,没见过两个参数的版本,可能是2.x的吧,不太清楚

至于碰撞事件的问题,你可以用setContactTestBitmask

注意:是对两个要碰撞的body都调用setContactTestBitmask,参数也不一定是要0xFFFFFFFF,只要两个bitmask做&运算能得到非0值就可以了
比如:
bodyA->setContactTestBitmask(1);
bodyB->setContactTestBitmask(3);
它们碰撞就会有通知啦~~(想简单点就把它们设成相同的非0值也行)

另外,用setGroup也可以实现,只要把它们的group设为一样就可以了
bodyA->setGroup(1);
bodyB->setGroup(1);

个人比较喜欢setContactTestBitmask的方式,可以用于复杂需求

onContactBegin 在3.0bate版本中是两个参数所以用CC_CALLBACK_2
但是该方法在rc版本里变成一个参数了,所以需要使用CC_CALLBACK_1
bool onContactBegin(PhysicsContact& contact);
并且需要在body设置中加入两条
body->setMass(1.0f);
body->setContactTestBitmask(0xFFFFFFFF);

mark、已解决

能告诉我是怎么解决这个问题的吗?我也遇到了同样的问题

我是来学习的:5::5::5:

解决了,也不公布一下。 mark 一下就走人。 牛

问题最终并没有解决,没有专业的搞客户端,所以用了另一种方式绕过去了。