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就不会反弹了。
跪求大神解答!