【问题标题】:Stopping/Restarting animation inside loop with Babylon.JS使用 Babylon.JS 在循环内停止/重新启动动画
【发布时间】:2020-03-25 01:13:57
【问题描述】:

我用三个动画设置这个循环,第一个在初始屏幕加载时运行 (firstAnimation)。然后接下来的两个动画使用回调在它们之间循环(slideAnimation -> rotateAnimation -> slideAnimation...)

如何停止使用POINTERDOWN 的动画并在PONTERUP.. 上恢复它?

我在下面所做的方式仅在 firstAnimation 期间有效,一旦它进入循环,它显然不再针对这两个动画。那么如何使用单个 .pause() .resume() 命令来定位所有三个动画呢?

  var slideAnimation = function(){
      scene.beginDirectAnimation(box, [xSlide], 0, 2 * frameRate, false, 2, rotateAnimation);
  }

  var rotateAnimation = function(){
      scene.beginDirectAnimation(box, [yRot], 0, 2 * frameRate, false, 2, slideAnimation);
  }

  var firsAnimation = scene.beginDirectAnimation(box, [xSlide], 0, 2 * frameRate, false, 2, slideAnimation);

  scene.onPointerObservable.add((pointerInfo) => {
      switch (pointerInfo.type) {
          case BABYLON.PointerEventTypes.POINTERDOWN:
              light2.intensity =0.95;
              firsAnimation.pause();
              box.scaling = new BABYLON.Vector3(4, 1, -1)
              break;
          case BABYLON.PointerEventTypes.POINTERUP:
              light2.intensity =0.15;
              firsAnimation.restart();
              box.scaling = new BABYLON.Vector3(1, 1, 1)
              break;
      }
  });

或者这需要一种不同的方法吗?

【问题讨论】:

    标签: javascript babylonjs babel-babylon


    【解决方案1】:

    Babylon Group Animations 可能对您有用 - https://doc.babylonjs.com/how_to/group。这是一种将动画和动画对象分组、然后标准化并一起控制它们的方法。

    你可以在这里看到一个例子 - https://www.babylonjs-playground.com/#CBGEQX#5

    如果您想在一个动画(网格)上同时看到 2 个动画,请将第 79 行从

    animationGroup.addTargetedAnimation(animation2, box2);
    

    animationGroup.addTargetedAnimation(animation2, box1);
    

    然后按下顶部的运行按钮。

    然后按下支付按钮将在同一个网格上运行两个动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多