cocos 剛體穿透解決方案。
阿新 • • 發佈:2019-02-01
剛體穿透:打個比方,比如一個圓球在一個正方形的方框裡面不同的彈射。當圓球達到一定的速度時候,會出現一個bug,圓球會直接彈出方框,還沒有進行正確的碰撞檢測。 這種情況叫做剛體穿透。之所以出現這種情況是因為圓球速度過快,方框的厚度不夠,那麼在剎那的短時間內系統沒有對其進行碰撞檢測,而當球剛好已經穿過方框後才進行碰撞檢測就不行了。
cocos3.7版本提出了他的解決方案,比如在一幀做一次碰撞檢測,那麼我們可以在1幀做3次碰撞檢測(這種比方也許不是很正確,大概這個意思。)
我們來下面的程式碼。在我們的場景類中加入如下程式碼。
void GameScene::update(float dt)
{
for (int i = 0; i < 3; ++i)
{
mScene->getPhysicsWorld()->step(1 / 180.0f);
}
}
void GameScene::startUpdate(float dt)
{
//防止剛體穿透。
mScene->getPhysicsWorld()->setAutoStep(false);
scheduleUpdate();
}
GameScene是繼承Layer,結構跟helloWord一樣,在init裡面呼叫startUpdate就OK了。