Hi, 各位大佬。我使用的是creator 1.10.2。工程中使用代码动态加载龙骨资源可以正常显示。当销毁节点后,chrome浏览器没有问题,但是在模拟器,ios真机,android真机上必然会出现crush。我动态加载龙骨的核心代码是:
crush堆栈信息是:
我已经按照论坛里面已有的帖子的方法来修改:动态切换龙骨,也反反复复尝试了多种帖子的方法,仍然没法解决。附件是最小化后的测试工程test.zip (954.9 KB),可以必然重现该问题。迫切需要大佬们的帮助,万分感谢了!
Hi, 各位大佬。我使用的是creator 1.10.2。工程中使用代码动态加载龙骨资源可以正常显示。当销毁节点后,chrome浏览器没有问题,但是在模拟器,ios真机,android真机上必然会出现crush。我动态加载龙骨的核心代码是:
crush堆栈信息是:
我已经按照论坛里面已有的帖子的方法来修改:动态切换龙骨,也反反复复尝试了多种帖子的方法,仍然没法解决。附件是最小化后的测试工程test.zip (954.9 KB),可以必然重现该问题。迫切需要大佬们的帮助,万分感谢了!
我也有这个问题 请解决后能分享一下 感谢
/*
1.9.3版本可用,1.10.2应该也可以,虽然没试过。
这是我自己的代码,里面获取名称什么的根据实际应用自己改。
*/
_playBone:function(name){
let self = this;
// 根据自己项目实现 获取下两个骨骼文件的路径
let monster_db_name = this._monstersBasic[name].manual_db_name;
let dbUrl_ske = 'armature/monsters/manual/' + monster_db_name + '_ske';
let dbUrl_tex = 'armature/monsters/manual/' + monster_db_name + '_tex';
let node = self.widget.getChildByName('monsterDB');
this.armatureDisplay = node.getComponent(dragonBones.ArmatureDisplay);
/*
俺遇到的情况是1.9.3版本原本没有以下这些代码,顺利运行,后来手贱升级到2.0(发现native上性能呵呵了),又降回1.9.3后又出现坑,又不行了。
经过多番折腾,目前这些就是现在俺已发布项目运行的代码了。希望能帮到你
*/
// 不是native调用可能会报错
if(cc.sys.isNative){
this.armatureDisplay._factory.clear(false);
}
//如果没有这三行,web平台会爆找不到动画的警告
// 注意creator 1.9.3版本是使用属性名'_armatureName‘,而creator 2.0版本是'armatureName',不要问我为啥
this.armatureDisplay._armatureName = null;
this.armatureDisplay.dragonAsset = null;
this.armatureDisplay.dragonAtlasAsset = null;
/*
以上,到上个说明,是我自己项目中creator版本升级后又降级多的,你可能用不上
*/
cc.loader.loadRes(dbUrl_tex,dragonBones.DragonBonesAtlasAsset,function(err,atlasasset){
self.armatureDisplay.dragonAtlasAsset = atlasasset;
cc.loader.loadRes(dbUrl_ske,dragonBones.DragonBonesAsset,function(err,asset){
// '_armatureName'是做龙骨骨骼时里面设置的名字而不是龙骨文件的名字,这个因该都懂的吧。
let current_db_armature_name = monster_db_name + '_manual';
self.armatureDisplay._armatureName = current_db_armature_name;
self.armatureDisplay.dragonAsset = asset;
self.armatureDisplay.playAnimation('wait',0);
});
});
}
谢谢好心人,我按照你的方法进行修改,下面是新修改的动态龙骨节点生成和载入方法:
在Chrome中没有任何问题(创建,载入和销毁节点),在模拟器,ios,android上创建和载入没有问题,但还是在销毁的时候会crush(和原来一样的错误。多点几次open和close就容易出现)。我反反复复测试了后,上传了对应的新的测试工程test.zip (956.7 KB),还烦劳费心了!
@413485698
我在Mac版的1.9.3的模拟器上测试多次反复点击open和close都没有出现奔溃的情况。
而且你的测试代码中
onClickClose: function() {
this.testNode.removeAllChildren();
},
仅仅是将实例从父节点移除,并没有销毁龙骨的实例。你要确认是否是因为销毁龙骨引起的。
俺将其改为
onClickClose: function() {
let my_children = this.testNode.children;
let len = my_children.length;
for(let i = len - 1 ; i >= 0 ; i--){
my_children[i].destroy();
}
// this.testNode.removeAllChildren();
},
真正的销毁了,也没有报错。当然也是1.9.3版本。
个人认为目前做native最稳定的版本还是1.9.3。如果要做小游戏啥的,俺就不知道了。
非常感谢你耐心细致的解答,还帮我看了测试工程。我自己也按照这样的方式进行了修改。我又找了一台机器来安装1.9.3版本运行相同的工程,可以得出结论:
再次非常感谢 @413485698,热心肠的人!
同样的问题,1.10.2尝试各种办法不能解决,无意间看到大神的帖子,降级顺利解决。。
creator真真不能随便更新,太坑了