带有 box2d 联系人监听器的 cocos2dx 不起作用

Posted

技术标签:

【中文标题】带有 box2d 联系人监听器的 cocos2dx 不起作用【英文标题】:cocos2dx with box2d contactlistener doesnt work 【发布时间】:2021-05-29 01:59:41 【问题描述】:

我在我的 cocos2dx v4 项目中使用 box2d 2.3.1physics 引擎。我的多边形形状是使用物理编辑器创建的。一切都正常碰撞,但联系人监听器不记录联系人。

这是我在 helloworld.h 中定义的联系人监听头

MyContactListener 类:公共 b2ContactListener 私人的 : 无效 BeginContact(b2Contact* 联系人); 无效 EndContact(b2Contact* 联系人); void PreSolve(b2Contact* contact, const b2Manifold* oldManifold); void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);

;

这是我在 helloworld.cpp 中的联系人监听器实现

void MyContactListener::BeginContact(b2Contact* 联系人) std::cout

void MyContactListener::EndContact(b2Contact* 联系人)

std::cout

void MyContactListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold)

std::cout

void MyContactListener::PostSolve(b2Contact* contact, const b2ContactImpulse* impulse)

std::cout

MyContactListener myContactListenerInstance;

以及我对世界的联系人监听器分配(在 helloworld.cpp init 中)

_rootWorld->getb2World()->SetContactListener(&myContactListenerInstance);

一切正常但它不记录冲突联系人

我的身体类别和位掩码值是

主体 A:位掩码:63,类别:1

body B:位掩码:63,类别:2

body C:位掩码:63,类别:4

body D:位掩码:63,类别:8

body E:位掩码:63,类别:16

body F:位掩码:63,类别:32

谁能帮忙?

【问题讨论】:

【参考方案1】:

我通过将 std::cout 更改为 log("...") 解决了问题,我猜 cocos2dx 引擎改变了 std::cout 行为,所以我不打印任何东西

【讨论】:

以上是关于带有 box2d 联系人监听器的 cocos2dx 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

基于Cocos2dx + box2d 实现的愤慨的小鸟Demo

Box2d 接触式传感器 COCOS2D

cocos2dx 3.X刚体update穿透问题。刚体A在update中通过摇杆移动,设置的和刚体

带有内部 box2d 物理崩溃的 SpriteKit 游戏

Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

cocos2dx中常见设计模式