好的,我明白了。多谢:)
刚才测试了1.61正式版本,这个问题还存在,请问这个修复合并到1.61正式版了么?
binary方式。
123
我的项目使用的是binary方式,只是想确认这个修复是否合并到binary方式啦?之前看过beta 版指定的源码文件,是更新过的
beta 版一般不会更新 binary,正式版会合并的
我昨天测试的就是1.61正式版呢
多么期望每次等待很多天已完成的修复,可以确定无误的合并到相邻的最近一个新版本啊。
等待很多天,重新安装新版本,如果cocos-lite更新了,还需要删除已有的,重新构建编译,重新导入配置相关sdk,然后还是没有。
现在没效果的表现是什么?有报错吗?如果是我的修复没有生效的话,应该是会报错的,arguments parsing issue 或者 arguments 的其他错误信息。
感觉你那个 log [track …] 应该是有打印出来的吧?好像跟我修复的问题没什么关系的样子
去掉 scheduleOnce 直接切换场景呢
没有报错信息,这段代码的上下文代码都执行了。没有看到end的log打印。
另外:为什么xcode控制台打印的是Cocos2d-x-lite v1.6.0,但是构建编译时提示需要删除旧的,目前lite版本其实已经是1.6.1,已经删除beta2的,重新构建的干净的目录了,虽说这个不影响,但是很疑惑。
版本号貌似没改,这个是不影响。
没有看到 end 的 log 就很奇怪了,我们的测试例一直都有 EndListener 的测试,都可以正常回调。
你检查一下打包出来的目录下的 project.dev.js,找到 setEndListener 那行,看看代码有没有被正确编译成 ES5 函数的形式
spine.setEndListener(function (track) {...
project.dev.js中的代码段是这样的。
adShowTimeoutCallback: function adShowTimeoutCallback() {
var self = this;
var skeleton = this.node.getChildByName("skeleton");
skeleton.active = true;
this.adNode.active = false;
this.radialNode.active = false;
var spine = this.spine = skeleton.getComponent("sp.Skeleton");
spine.setEndListener(function(track) {
console.log("[track %s] end", track);
self.scheduleOnce(function() {
cc.audioEngine.stopAll();
cc.director.loadScene(self.next);
}, 1);
});
this.node.on(cc.Node.EventType.TOUCH_START, function(event) {
self.clickStart();
}, this.node);
},
看上去没问题,可以在 setEndListener 之前检查一下 spine._sgNode 是否存在
受到panda兄的启发我找到原因了,但是不知道怎么解决。
我试了官方的spineboy例子,可以执行endlistener中的函数,证明引擎在一定条件下可以正常运行这个功能。
我的项目中的skeleton开始在面板那勾选了active为false,这种情况怎么都不会运行结束回调函数,即使在代码中已经又设置为了active为true。
结束回调可以运行必须满足两个条件:
(1)在面板那必须勾选active为true
(2)增加这个代码spine.setAnimation(0, ‘walk’, false,0);
具体位置为:
var skeleton=this.node.getChildByName('skeleton');
skeleton.active=true;
this.adNode.active=false;
this.radialNode.active=false;
var spine = this.spine = skeleton.getComponent('sp.Skeleton');
spine.setAnimation(0, 'walk', false,0);//新增代码
spine.setEndListener(track => {
console.log("[track %s] end-----------", track);
self.scheduleOnce(function(){
//cc.audioEngine.end();
cc.audioEngine.stopAll();
cc.director.loadScene(self.next);
},2);
});
我确定之前可以运行的引擎版本是不用添加新增代码的。
在setEndListener之前这个节点是存在的,可以打印出对象
谢谢反馈,确实会收到 active 的影响,我们会在今后进行修正。
嗯即使active在面板那设置为true,animation那不能为none,也需要增加那行代码。
我会想办法绕过去,不纠结这啦。
谢谢panda兄和jare兄的帮助,提供了很多启发性的思路。
1.6.2beta2中setEndListener还是会受到active的影响,请问这个会在哪个版本中可以支持在面板中设置acitve为false,然后在脚本中动态设置为true,同时不影响setEndListener的执行呢?
@bluehumor spine-runtime在3.5版本之后重新定义了EndListener的触发条件,和3.5之前的版本不一样了。
3.5+的版本End回调只有当一个Track上的CurrentEntry不再是CurrentEntry时才会产生。一个Entry运行完毕时仍然是对应Track的CurrentEntry,所以只会调用Complete回调。除非被下一个Entry替换,或者是调用ClearTrack之类的方法。所以如果是不能触发End回调的话可以先检查一下是不是因为这个原因
这个之前已经确认了是因为active的问题导致的失效