找到文件 laya.d3.js 进行修改
路径:bin\libs\laya.d3.js
找到方法 _updatePlayer 进行如下修改
_updatePlayer(animatorState, playState, elapsedTime, islooping) {
var clipDuration = animatorState._clip._duration * (animatorState.clipEnd - animatorState.clipStart);
var lastElapsedTime = playState._elapsedTime;
var elapsedPlaybackTime = lastElapsedTime + elapsedTime;
playState._lastElapsedTime = lastElapsedTime;
playState._elapsedTime = elapsedPlaybackTime;
var normalizedTime = elapsedPlaybackTime / clipDuration;
playState._normalizedTime = normalizedTime;
var playTime = normalizedTime % 1.0;
playState._normalizedPlayTime = playTime < 0 ? playTime + 1.0 : playTime;
playState._duration = clipDuration;
var scripts = animatorState._scripts;
// 修改后代码
if (!islooping) {
console.log(elapsedPlaybackTime, clipDuration);
if (elapsedPlaybackTime > 0) {
if (elapsedPlaybackTime >= clipDuration) {
playState._finish = true;
playState._elapsedTime = clipDuration;
playState._normalizedPlayTime = 1.0;
}
} else if (elapsedPlaybackTime * -1 >= clipDuration) {
playState._finish = true;
playState._elapsedTime = clipDuration;
playState._normalizedPlayTime = 0;//设置为0,不会返回动画第一帧初始位置
//playState._normalizedPlayTime = 1; //设置为1,会返回动画第一帧初始位置
}
return;
}
//以下是原代码
// if ((!islooping && elapsedPlaybackTime >= clipDuration)) {
// playState._finish = true;
// playState._elapsedTime = clipDuration;
// playState._normalizedPlayTime = 1.0;
// return;
// }
if (scripts) {
for (var i = 0, n = scripts.length; i < n; i++)
scripts[i].onStateUpdate();
}
}
如果希望动画播放完毕,停留在最后一帧,设置属性为 0
playState._normalizedPlayTime = 0;
如果希望播放完毕回到动画第一帧的位置,设置为1
playState._normalizedPlayTime = 1;