threejs动画播放(暂停、倍速、循环)AnimationAction

参考资料:threejs中文网

threejs qq交流群:814702116

动画播放(暂停、倍速、循环)

上节课对关键帧动画如何创建,如何播放,做了整体介绍,下面进一步介绍关键帧动画播放的知识,比如关键帧动画停止播放、暂停播放、倍速播放…

动画动作对象AnimationAction

查看文档你可以知道,执行播放器AnimationMixer.clipAction()方法会返回一个AnimationAction对象。

//AnimationMixer的`.clipAction()`返回一个AnimationAction对象
const clipAction = mixer.clipAction(clip);

AnimationAction对象的功能就是用来控制如何播放关键帧动画,比如是否播放、几倍速播放、是否循环播放、是否暂停播放…

你可以测试注释代码clipAction.play();,看看关键帧动画是否变化。

//.play()控制动画播放
clipAction.play();

AnimationAction的循环属性.loop

通过AnimationAction的循环属性.loop可以控制动画是否循环播放。

const clipAction = mixer.clipAction(clip);
//.play()控制动画播放,默认循环播放
clipAction.play();
//不循环播放
clipAction.loop = THREE.LoopOnce; 

AnimationAction.clampWhenFinished属性

当你通过clipAction.loop = THREE.LoopOnce设置播放模式为非循环模式的时候,你会发现关键帧动画执行完成一个后,模型回到了关键帧动画开头状态,如果你希望模型停留在关键帧动画结束的状态,可以设置.clampWhenFinished属性实现,.clampWhenFinished属性默认是false,设置为true即可

//不循环播放,执行一次后默认回到动画开头
clipAction.loop = THREE.LoopOnce; 
// 物体状态停留在动画结束的时候
clipAction.clampWhenFinished = true;

停止结束动画.stop()

执行AnimationAction的.stop()方法,动画会停止,并结束,模型回到动画开始状态,注意不是暂停,是动画彻底终止,回到初始状态。

//动画停止结束,回到开始状态
clipAction.stop();
<div class="pos">
    <div id="stop" class="bu">停止</div>
    <div id="play" class="bu" style="margin-left: 10px;">播放</div>
</div>
document.getElementById('stop').addEventListener('click',function(){
  clipAction.stop();//动画停止结束,回到开始状态
})
document.getElementById('play').addEventListener('click',function(){
  clipAction.play();//播放动画
})

是否暂停播放.paused

.paused默认值false,动画正常执行,如果你想暂停正在执行的动画可以把.paused设置为true,对于暂停执行的动画,你把.paused设置为false,动画会接着暂停的位置继续执行。

<div id="bu" class="bu">暂停</div>
const bu = document.getElementById('bu');
bu.addEventListener('click',function(){
    // AnimationAction.paused默认值false,设置为true,可以临时暂停动画
    if (clipAction.paused) {//暂停状态
        clipAction.paused = false;//切换为播放状态
        bu.innerHTML='暂停';// 如果改变为播放状态,按钮文字设置为“暂停”
      } else {//播放状态
        clipAction.paused = true;//切换为暂停状态
        bu.innerHTML='继续';// 如果改变为暂停状态,按钮文字设置为“继续”
      }
})

倍速播放.timeScale

clipAction.timeScale = 1;//默认
clipAction.timeScale = 2;//2倍速

拖动条调整播放速度

gui辅助快速创建一个可交互拖动条,实际开发,可以用vue或react创建的拖动条。

const gui = new GUI(); //创建GUI对象
// 0~6倍速之间调节
gui.add(clipAction, 'timeScale', 0, 6);
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值