[LayaAir3]Laya 2.x/3.x 演示项目中 Laya.timer.scale 和 Laya.SpineSkeleton.playbackRate 对部分骨骼加速不生效

3.x 这个骨骼使用  Laya.timer.scale 和 Laya.SpineSkeleton.playbackRate 只能加速2倍左右,再高设置无效好像有加速上限一样。
在2.x中则是完全不生效 无法加速。作为对比 其他两个骨骼的增减速是受影响的,也可以加速至10倍以上。请问这是什么原因导致这个问题?骨骼动作使用了不支持动作参数?还是某些骨骼版本不支持?还是其他原因,望大大快速回复
LayaTimerScale失效.png
已邀请:

layabox

赞同来自:

在本月即将发版的3.2.3上,已开放最大加速限制接口,maxDetlaTime。
 
如果你需要通过整体的播放加速,光设置Laya.timer.scale肯定不行,会和你之前遇到的问题一样,3.2.3开始,你可以通过设置maxDetlaTime来改变引擎的默认值。

几种方式,
1、在脚本的onUpdate里设置,代码示例如下:
 
    onUpdate(): void {
        this.spineAni.maxDetlaTime = Laya.timer.delta / 1000 * Laya.timer.scale;
    }
这种方式准确,但不建议。
2、直接设置一个较大的maxDetlaTime值,相当于取消了引擎内部的限制,完全取决于Laya.timer.scale。

虽然我们提供了maxDetlaTime,但是,以上两种都不建议,Laya.timer.scale会影响全局,只有特殊情况下,才需要使用maxDetlaTime来控制。

通常情况下,请使用playbackRate来控制spine的播放速度。这个方法简单有效,可以随时用,不需要等发3.2.3版
 

layabox

赞同来自:

第一、playbackRate在3.1.6和3.2.2中实测是没问题的,例如你在示例中的代码中增加playbackRate测试即可,代码如下:
    playSpine(): void {
//找到spine动画组件
this.spineAni = this.spineNode.getComponent(Laya.Spine2DRenderNode);
//获得spine动画的数量,这里要重点提醒的是,由于spine组件只有Play会由引擎去加载完成后才去播放,调用其它的API,务必要保障spine动画资源已经加载完成。否则会报错。
this.spineAniNum = this.spineAni.getAnimNum();
//按索引播放动画
this.spineAni.play(this.spineAniIndex, true);
//设置播放速率,这里设置成10倍速播放
this.spineAni.playbackRate(10);
//侦听点击,换动画
this.spineBtn.on(Laya.Event.CLICK, this, this.changeAni);
}
第二,你通过Laya.timer.scale设置比较大的值,受限制是因为引擎中作了一些优化保护,让动画不至于播放过快。如果你想自己控制速度,我们也可以放开。未来将于3.2.3及以上版本上开放内部用的最大maxDetlaTime加速限制接口,用于开发者自行设置播放加速。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作