龙骨骨骼碰撞框检测

this._armatureDisplay = this.node.getComponent(dragonBones.ArmatureDisplay);
this._armature = this._armatureDisplay.armature();
var fuck = this._armature.getSlots();
this.slots = fuck.filter(slot => {
               return !!slot.boundingBoxData;
});

fuck的数据,本地输出是正确的。但是到了,真机或者模拟器上,就不是期望的数据。不存在 boundingBoxData字段,有人能帮忙解决下,在模拟器/真机模式下,怎么才能正确得获得boundingBoxData数据呢?

自己用:slot.getBoundingBoxData() 也不能得到正确的结果

1. this._armatureDisplay = this.node.getComponent(dragonBones.ArmatureDisplay);
2. this._armature = this._armatureDisplay.armature();

3. // if (!cc.sys.isNative) {
4. // 	this.slots = this._armature.getSlots().filter(slot => {
5. // 		return !!slot.boundingBoxData;
6. // 	});
7. // } else {
8. this.slots = [];
9. var fuck = this._armature.getSlots();
10. for (var i = 0; i < fuck.length; i++) {
11. 	var slot = fuck[i];
12. 	var dame = slot.getBoundingBoxData();
13. 	if (dame) {
14. 		// this.slots.push(slot);
15. 	}
16. }
17. // }
第11行运行完后会报错,错误如下:
2019-04-11T02:27:24.798Z - normal: Simulator: D/jswrapper (129): JS: Cocos Creator v2.0.9

2019-04-11T02:27:59.971Z -error: Simulator: E/jswrapper (4351): jsb: ERROR: File ..\cocos\scripting\js-bindings\auto\jsb_cocos2dx_dragonbones_auto.cpp: Line: 4351, Function: js_cocos2dx_dragonbones_Slot_get_displayController
E/jswrapper (4351): js_cocos2dx_dragonbones_Slot_get_displayController : Invalid Native ObjectE/jswrapper (4359): [ERROR] Failed to invoke js_cocos2dx_dragonbones_Slot_get_displayController, location: ..\cocos\scripting\js-bindings\auto\jsb_cocos2dx_dragonbones_auto.cpp:4359
    at HTMLElement.print-simulator-log (C:\Naix\workspace\CocosCreator\resources\app.asar\editor\builtin\scene\panel\messages\scene.js:1:1501)
    at Object.e._dispatch (C:\Naix\workspace\CocosCreator\resources\app.asar\editor-framework\lib\renderer\panel.js:1:1941)
    at EventEmitter.o.on.s (C:\Naix\workspace\CocosCreator\resources\app.asar\editor-framework\lib\renderer\ipc.js:1:2917)
    at emitMany (events.js:127:13)
    at EventEmitter.emit (events.js:204:7)
2019-04-11T02:27:59.972Z - error: Simulator: E/jswrapper (4351): jsb: ERROR: File ..\cocos\scripting\js-bindings\auto\jsb_cocos2dx_dragonbones_auto.cpp: Line: 4351, Function: js_cocos2dx_dragonbones_Slot_get_displayController
E/jswrapper (4351): js_cocos2dx_dragonbones_Slot_get_displayController : Invalid Native ObjectE/jswrapper (4359): [ERROR] Failed to invoke js_cocos2dx_dragonbones_Slot_get_displayController, location: ..\cocos\scripting\js-bindings\auto\jsb_cocos2dx_dragonbones_auto.cpp:4359
    at HTMLElement.print-simulator-log (C:\Naix\workspace\CocosCreator\resources\app.asar\editor\builtin\scene\panel\messages\scene.js:1:1501)
    at Object.e._dispatch (C:\Naix\workspace\CocosCreator\resources\app.asar\editor-framework\lib\renderer\panel.js:1:1941)
    at EventEmitter.o.on.s (C:\Naix\workspace\CocosCreator\resources\app.asar\editor-framework\lib\renderer\ipc.js:1:2917)
    at emitMany (events.js:127:13)
    at EventEmitter.emit (events.js:204:7)

去看引擎源码,可能要自己绑定

slot.updateTransformAndMatrix();
需要先调用这个, 才能更新当前碰撞位置信息
然后得到的slot.boundingBoxData通过slot.globalTransformMatrix.transformPoint这个方法转换坐标

试试,谢谢。

按照你说的方法试了,确实可以得到碰撞区域。通过画出来显示也是正常的,但是随着动画循环播放的时间越来越久,碰撞区域逐渐开始偏移,请问这是什么原因

哥们你能通过上面的方法得到碰撞区域??


为啥我这么写,上面的输出是null 下面的是undefined呢?在andorid真机上

你好我也出现了这个问题, 原因应该就是出在updateTransformAndMatrix这个函数上,请问你有解决的方法了吗

你可以把所有slot打印出来,看一下他们的属性里的boundingBoxData有没有值

有,而且是唯一不改引擎源码的解决方法,全论坛估计就我这样改最方便,不动updateTransformAndMatrix,
根结构如下Root->子节点A,子节点B,A节点和B节点同级,不要在Root节点挂龙骨组件,直接挂在子节点上

可以再说详细点嘛?

有大神有详细一点的方法嘛