好吧,其实这篇也是临时冒出来的,最近朋友要做个物理游戏,以前做物理还是用box2d,呃,确实要花些功夫才能搞懂其中的精髓,但是听讲这套引擎重新封装了一次,要容易很多,所以就简单尝试了一下,感觉确实要简单不少,不过在这其中还是遇到了些问题,首先就来说说onContactBegin这个回调函数响应问题。
先说说情况,简单做了一个打砖块的游戏,前面一切都很顺利,只是做到碰撞检测的时候,发现回调函数弄死都不调用。开始我以为函数写错了,后来查了api,testCpp都没有错,在3.0的api中,没有关于PhysicsBody,PhysicsWorld这些类的说明,所以大家想查移步到3.2的api中吧。
onContactBegin函数的参数就一个,
bool onContactBegin(PhysicsContact& contact),这和3.0beta版本又有些不同,以前是2个,所以在添加事件监听的时候,不要写错,like this,
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_1(HelloWorld::onContactBegin, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
回调函数是在当两个物体有接触的时候就会响应一次,里面的参数从名字中也能看出来,Contact接触,自然会涉及到两个物体。
好了,下面该到重点了,为啥这个onContactBegin函数不响应呢?问题出在三个掩码值上,这里推荐一下看下这篇

在Cocos2d-x 3.0中,作者遇到onContactBegin回调函数不响应的问题。文章详细介绍了这个问题的原因,涉及到PhysicsBody和PhysicsWorld的API,并提醒读者查阅3.2版本的API。问题的关键在于CategoryBitmask、ContactTestBitmask和CollisionBitmask的逻辑运算。默认情况下,虽然物体能碰撞,但接触事件不会触发。通过修改掩码值,确保两者逻辑与结果不等于0,可以解决此问题。

1万+

被折叠的 条评论
为什么被折叠?



