【问题标题】:How to get delta from audio.currentTime?如何从 audio.currentTime 中获取增量?
【发布时间】:2015-11-13 03:23:56
【问题描述】:

我想将我的 Three.js 骨骼动画绑定到音轨。通常,要为模型设置动画,我会这样做:

var clock = new THREE.Clock();

function animate(){
    var delta = clock.getDelta();
    THREE.AnimationHandler.update(delta);
    requestAnimationFrame(animate);
}

但是现在我有一个我想使用的 HTML5 音频对象,我可以从中获取 audio.currentTime,但是将其转换为动画可以理解的增量的最佳方法是什么?

只是将audio.currentTime off 保存到动画函数之外的变量中,然后从新的audio.currentTime 中减去它,还是需要更多的逻辑?就像如果用户将曲目倒带一点会发生什么?增量会/应该是负数吗? THREE.AnimationHandler 可以处理吗,还是我需要做一个Math.max(delta, 0) 或其他什么?

【问题讨论】:

  • 你为什么不试试呢?
  • @Andreas,我做到了。它似乎有效,但我不知道这是否是正确的方法。
  • 答案刚刚更新,可以吗?

标签: javascript html animation audio three.js


【解决方案1】:

未验证:根据文档,THREE.AnimationHandler.update 需要毫秒。使用音频值的增量应该不起作用,因为它应该返回一个比率,而不是以毫秒为单位的时间。


最好的解决方案,也适合您更改audio.currentTime 的情况,是使用THREE.Animation 类的currentTime 属性。

所以你可以简单地写在渲染循环中:

    myAnimation.currentTime = audio.currentTime ; 

【讨论】:

  • 请看我发布的答案。它似乎工作。我不确定您所说的音频返回“比率”是什么意思。我无法使用您使用 animation.currentTime 的解决方案,因为我有多个动画在时间线上一个接一个地播放。
【解决方案2】:

我最终做的是:

var previousTime = 0;

function animate() {
    requestAnimationFrame(animate);
    var currentTime = audio.currentTime;
    var delta = currentTime - previousTime;
    previousTime = currentTime;

    THREE.AnimationHandler.update(delta);
    renderer.render(scene, camera);
}

我不知道这是否会产生我不知道的副作用。如果是这种情况,请告诉我。谢谢。

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多