物理引擎bug

  • Creator 版本:1.9.1

  • 目标平台: mac和ios真机以及模拟器

  • 详细报错信息,包含调用堆栈:

ERROR: TypeError: undefined is not an object (evaluating ‘c.body’), location: src/jsb_polyfill.js:11892:7
STACK:
emit@src/jsb_polyfill.js:11892:7
_onBeginContact@src/jsb_polyfill.js:12178:30
Step@[native code]
update@src/jsb_polyfill.js:12007:7
ERROR: TypeError: undefined is not an object (evaluating ‘c.body’), location: src/jsb_polyfill.js:11892:7

在碰撞开始BeganContact的时候
this.colliderA = t.GetFixtureA().collider;
this.colliderB = t.GetFixtureB().collider;
这里的colliderA,colliderB有时候是空的,这个很大概率是引擎的问题,我找了一晚上没有找到,不知道官方会不会管一下。chrome浏览器上没有问题,在mac和ios上有问题。

  • 重现方式: =我弄个demo

  • 之前哪个版本是正常的 :

  • 手机型号 :iphone6 ios10,mac也是的

  • 手机浏览器 :

  • 编辑器操作系统 :mac

  • 编辑器之前是否有其它报错 :无

  • 出现概率:

  • 额外线索:

问了一天这个了 - -

你也遇到这个问题了?

我刚刚看了CCPhysicsContact.js 第392行,这里没有报错。
另外引擎中的CCPhysicsContact的代码在哪里啊,我在工程里找不到

老哥,我遇到了同样的问题

同样问题 不知道老版本会有问题吗

@jjyinkailejj @jare 你好,请问是否在解决了。我看到一周以前就有人在发这个问题了

你联系到cocos研发人员了吗

我@了

顶一下

同学,demo上传一下。

我给你一个,怎么上传

请问这个问题,解决了吗?

是需要修改引擎源码吗?

同样踩了炸弹的人路过。。。。。。。。。求解。。。。。。。
貌似有人说是因为在物理碰撞回调里创建新的刚体出bug导致的 。。。

这个问题应该已经修复,更新github的engine代码就好了。
http://forum.cocos.com/t/1-92-1-10-native/59807/28?u=huanxinyin

1赞

1.81版本就不会出现这个问题 1.81以上版本貌似都会出现这个问题

1,在Xcode中搜索下面需要修改的地方的代码片段,就能找到该地方
2,按照下面的代码修改。
我已成功解决。

一、让对象JS层的Fixture不被GC。
在 var fixture = innerBody.CreateFixture(fixDef); 这句代码后,追加以下代码,令Fixture不被消耗。
if (cc.bkf == undefined){ cc.bkf = []; }
cc.bkf.push(fixture);
二、在Fixture进行Destroy的时候,先将 jsbinding解除。
修改引擎的native代码,在js_box2dclasses_b2Body_DestroyFixture 的 cobj->DestroyFixture(arg0); 改为如下代码:
se::Object* obj = se::Object::getObjectWithPtr(arg0);
obj->incRef();
cobj->DestroyFixture(arg0);
obj->clearPrivateData();
obj->decRef();
这个问题理论上所有用到 内存池 + gc绑定的都有风险,应该在这种对象,在native端销毁的时候都先解除jsbinding

仔细比对就没有问题