关于cocos2d_3.x物理引擎使用中物体高速移动会穿墙的研究

本文探讨了在cocos2dx 3.0以上版本中,物理引擎封装后物体高速移动穿墙的问题。通过研究cpp_test中的PhysicsFixedUpdate,发现关键在于设置正确的帧率和手动更新step。实验表明,将帧率设置为180,每帧执行3次step可以避免穿墙,但并非所有速度都适用。较高的nNFrame值会降低效率,需根据项目需求找到最佳平衡点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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所做的处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值