物理引擎求助,我整个人已经懵了

cocos2dx的物理引擎一直就弄的不怎么样,今天又写了个测试,更懵了,求指导。引擎版本为3.9。
物理世界重力为(0,-50)

问题1:刚体穿透

首先 物理边界的参数

auto body = PhysicsBody::createEdgeBox(worldSize, PhysicsMaterial(0.0f, 0.0f, 0.0f), 10.0f, Vec2(0.0f, 30.0f));
body->setDynamic(false);
body->setCategoryBitmask(0xFFFFFF);//类型掩码
body->setContactTestBitmask(0xFFFFFF);//碰撞通知掩码
body->setCollisionBitmask(0xFFFFFF);//碰撞检测掩码

精灵的参数

auto actorPhyBody = PhysicsBody::createBox(m_Actor->getContentSize(), PhysicsMaterial(0.0f,0.0f,0.0f));
actorPhyBody->setDynamic(true);
actorPhyBody->setCategoryBitmask(0xFFFFFF);
actorPhyBody->setContactTestBitmask(0xFFFFFF);
actorPhyBody->setCollisionBitmask(0xFFFFFF);

这样程序初始化后是没问题的,但是在精灵执行完一个JumpBy动作后,精灵后直接透过边界掉下去

然后试着把边界值改大,改为50。

auto body = PhysicsBody::createEdgeBox(worldSize, PhysicsMaterial(0.0f, 0.0f, 0.0f), 50.0f, Vec2(0.0f, 30.0f));

跳跃后,不会掉下去了,但是有一个陷下去再浮起的过程。

然后试了用四个实体矩形组成边界,问题同样。

还有,给精灵直接设置一个比较大的质量的时候,精灵会直接穿过边界落下去。

问题2:反弹

给边界和精灵都设置了最大摩擦系数1.0,反弹为0

auto body = PhysicsBody::createEdgeBox(worldSize, PhysicsMaterial(0.0f, 1.0f, 0.0f), 10.0f, Vec2(0.0f, 30.0f));
auto actorPhyBody = PhysicsBody::createBox(m_Actor->getContentSize(), PhysicsMaterial(0.0f,1.0f,0.0f));

然后给了精灵一个向上的速度

m_Actor->getPhysicsBody()->setVelocity(Vec2(0, 50));

然后精灵落下来后,仍然发生反弹。然后把摩擦都设为0就不会反弹了。

跪求大神解答!

第二个问题我解决了,原来自己大意把参数顺序搞乱了,第二个是弹力,第三个是摩擦:890:

问题一想了个逃避的法子,改成无重力世界。后果就是完全抛弃物理引擎了,碰撞检测自己写。。。。。:12:

问一下 我第一个场景切换到第二个场景 第二个场景为物理场景 开了调试 但是切换之后看不到红框框 把一个物体加到场景中去 就在当前场景中消失了 如果直接启动第二场景 就能正常使用 为什么

你应该是把有关刚体的初始化写在了init()函数里边。以前我也遇到过,用日志输出发现那个物体不是消失了,而是坐标变成了一个无限大的数。后来把所有有关物理引擎的代码都写到了切换场景后才调用,问题就解决了,我也不知道这是个什么情况。当时版本是3.9。

问题一的话 你物理世界边可以不用设置碰撞检测那三个c,直接吧世界的边设置成刚体边界