我用cocos2dx 3.4版本,做了一个小球从高处下落,下面不断产生上升的横条,预期是小球落到上升的横条上,但现在是小球落到横条上后就穿过去了。大家有遇到此类问题的吗?
首先看一下小球和横条的三个bitmask值是否设置正确,如果正确的话有可能是小球速度过快,导致刚体发生穿透现象,可以用以下方法解决:
获取当前的物理世界,将物理世界的autoStep属性设置为false,然后添加一个定时器,设置物理世界的step为一个比较低的帧率。通常update中设置为每帧三次,如果还是会穿透的话就增加次数
getScene()->getPhysicsWorld()->setAutoStep(false);
scheduleUpdate();
void GameTest::update(float delta)
{
// use fixed time and calculate 3 times per frame makes physics simulate more precisely.
for (int i = 0; i < 3; ++i)
{
getScene()->getPhysicsWorld()->step(1/180.0f);
}
}
如果使用的是Box2D引擎,可以设置子弹属性,SetBullet(true),这样的刚体在移动时会计算每一个单位的移动是否发生碰撞,不会发生直接穿过障碍物的现象。