###环境
cocos2dx-3.17 JSB
###现象
界面上平常有50个元素,多的时候100~200。
使用物理引擎chipmunk做碰撞检测。
Android(OPPO A83)表现很差,从最开始能保持50~60帧,10多分钟后下降到10帧。
iOS(iPhone 6)好一点,能至少坚持半小时。
在停止碰撞后,帧率回升,再开始碰撞,帧率持续下降。
通过 Date.now()
打印时间,this.space.step(dt)
耗时很长。
尝试改变迭代次数 setIterations
设置为1,还是没有改善。
###猜测
感觉是有什么东西没有释放掉。
在框架中也有看到JSB_cpBody_finalize
和 JSB_cpShape_finalize
绑定。
但是去调用body.finalize()
和 shape.finalize()
却找不到该方法,能用的只有destroy
。
本人初次使用物理引擎,还请各位大神解疑。
最后附上回收代码。
recycle: function (sp) {
var self = this;
var func = function () {
if (cc.sys.isObjectValid(sp)) {
var body = sp.getBody();
var shape = body.shape;
sp.stopAllActions();
sp.setVisible(false);
self.space.removeShape(shape);
shape.destroy();
self.space.removeBody(body);
body.destroy();
sp.removeAllChildren();
sp.removeFromParent();
} else {
cc.log("recycle duplicate!");
}
};
if (this.space.isLocked()) {
this.space.addPostStepCallback(func);
} else {
func();
}
},