发现chipmunk物理引擎的一个BUG,请问如何切合BOX2D引擎?

3.x起COCOS封装了物理引擎,但默认使用的是chipmunk引擎,听说可以切换成BOX2D,
但我翻看源码,发现那个封装物理引擎的CCPhysics类里只有导入 chipmunk 的头文件,根本就没有BOX2D,请问是如何实现切换的?

封装的chipmunk效率实在不高,本想还是用BOX2D,但是它的高度封装又很诱惑我。

请问是不是切换好后就可以直接使用BOX2D?要如何切换?

我找到一篇教程,说是安卓就在Application.mk里改,根本没提到win32,而且这个文件不是编译的时候才调用的吗?
这样真的有切换?

还是说我想用BOX2D就只能跟原来那样使用?

先谢谢各位大神了。:866:

这个是我遇到的BUG

我的物理世界是这样的:
由四面静态墙组成的世界包围盒,然后不断地从一个点喷出圆球。(这个本来是我测试物理引擎承受能力的小DEMO)
本来是正常运行的,我出去吃个饭,关闭电脑。回来后开机,打开VS,重新编译,运行这个DEMO。
这个时候诡异的事情发生了,球喷射出去后,离喷射点较远的球速度本来是逐渐缓慢,但是突然急剧加速,并且越来越大,
周围的球也被带动起来,快速弹射起来,最后全部弹出包围盒了。。。

我百思不得其解,我明明没做任何修改,为何会发生这种事。于是我重新新建一个项目,只添加增加物理世界的几句简短代码,
不做其他引入。然后一样创建一个包围盒,并在一个点不断喷射出小球。
编译,运行,依旧暴乱。。。

这个时候我迷茫了,于是我再简化我增加的代码,以防止潜在BUG,我把弹射小球改称只产生小球,并不给它们初速度。。。
再次运行,诡异的事情依旧。由于我这次没加速度,所以小球们一开始静止在原地,但最上方的小球慢慢地震动,然后震动速度越来越大。
凭空产生能量,而且带动下方的小球,直到最后一样快速冲出包围盒。

这个时候我就考虑到不是引擎就是编译器出问题了。。。考虑到微软强大的编译器怎么会这么容易出问题,我先研究引擎。

我发现mWorld变量里有这样一个函数,setSubstep,设置子步的。我想是不是子步太小导致引擎计算太频繁导致BUG,于是由默认的1改为10。

这个时候奇迹出现了,竟然不异常了。奇怪的是我之前明明没改过这个东西啊,怎么会异常。

然后我把数值又改回1,奇怪的是,这次也正常了,没异常出现。。

我返回我原来的项目,允许后发现也正常了。。。。

好奇葩!!!!!!!

这个BUG有随机性跟时间性!!!!!!!!

请问各位遇到过吗?

帮顶,封装的物理引擎的确方便,但总是不正常。

朋友你有什么好的解决方法么?

网上有关于3.0的方法,我用的是3.4的cocos框架。Cocos\frameworks\cocos2d-x-3.4\cocos\prebuilt-mk下有个Android.mk,按教程推测是把
chipmunk改成Box2D,还没试

不是的,你没发现这些改法都是在安卓的配置文件里吗?进源代码看CCPhysics类里面只有一个chipmunk include ,并没有box2d,改那些配置文件顶多是编译后链接文件改变而已吧。

原生的BOX2D功能可比chipmunk多多了

切不了的,要用box2d容易 ,全部加起来不超过50行代码就能搞定

我觉得也是,打算自己花点时间封装个BOX2D,今晚用COCOS封装的 chimunk,又出现那个BUG,而且我百度了下,发现不少人有这个问题,都没得解决。

用自带物理引擎创建物理世界的时候将物理世界的自动同步设置为否:setAutoStep(false)
在update()中手动设置同步:world->step(0.05f) ,参数设置为常数(稳定值),不要设置为频率
这样效果就和box2d差不多了,即使没有box2d的休眠机制,也不会运动异常

即使这个bug解决了。还有另外的BUG,这个封装的物理引擎问题太多。有些功能又被限制了。
我还是用BOX2D吧。
http://www.cocoachina.com/bbs/read.php?tid-294225.html