在cocos2dx 3.0以上的版本,cocos把物理引擎进行了封装,简单易用了但是还存在一些使用方面的问题。以下要说的是在研究 cpp_test中PhysicsFixedUpdate的一些心得。
示例中第一个球在高速移动中穿过了虚设的物理墙,第二个球并没有穿过是正常的我们想要的效果。其中代码中做的处理是
`void PhysicsFixedUpdate::updateStart(float delta)
{
addBall();
_physicsWorld->setAutoStep(false);
scheduleUpdate();
}
void PhysicsFixedUpdate::update(float delta)
{
// use fixed time and calculate 3 times per frame makes physics simulate more precisely.
//int num = 3;
//int nNFrame = 180;
//cocos frame = 60;
for (int i = 0; i < 3; ++i)
{
_physicsWorld->step(1/180.0f);
}
}`
其目的是让PhysicsWorld关闭自动更新setAutoStep(false),然后使用自定义的step(1/180.0f)。然后关键点来了,在自定义update中的3是怎么来的,为何是3而不是其他的值呢?step中的180为何是180而不是其他值呢?换一下会发生什么?我先定义一些变量cocos的帧率nFrame,我们想要的帧率为nNFrame,倍率 num = nNFrame/nFrame。
- 问题一,3和180的来源
调试的过程呢就不说了,因为经过多次测试我已经得出结论来了。首先180的由来是想设置cocos的帧率达到180帧,然而cocos的默认帧率是60帧,那么如何能让cocos实现每秒判断180次呢?so所做的处理