Остановка / перезапуск анимации внутри цикла с помощью Babylon.JS

Я устанавливаю этот цикл с тремя анимациями, первая из которых запускается при начальной загрузке экрана (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;
      }
  });

Или для этого нужен совсем другой подход?

1 ответ

Решение

Вам могут быть полезны анимации Babylon Group - https://doc.babylonjs.com/how_to/group. Это способ группировать анимации и анимированные объекты, затем нормализовать и управлять ими вместе.

Вы можете увидеть пример здесь - https://www.babylonjs-playground.com/

Если вы хотите, чтобы 2 анимации выполнялись одновременно на одном анимируемом (сетке), измените строку 79 с

animationGroup.addTargetedAnimation(animation2, box2);

к

animationGroup.addTargetedAnimation(animation2, box1);

И нажмите кнопку запуска вверху.

Затем нажатие кнопки оплаты запустит обе анимации на одной и той же сетке.

Другие вопросы по тегам