Stopping/Restarting 动画内循环 Babylon.JS
Stopping/Restarting animation inside loop with 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;
}
});
或者这是否需要一种不同的方法?
Babylon Group Animations 可能对您有用 - https://doc.babylonjs.com/how_to/group。它是一种对动画和可动画对象进行分组、然后规范化并一起控制它们的方法。
您可以在此处查看示例 - https://www.babylonjs-playground.com/#CBGEQX#5
如果您想在一个动画(网格)上同时看到 2 个动画 运行ning,请将第 79 行从
更改为
animationGroup.addTargetedAnimation(animation2, box2);
到
animationGroup.addTargetedAnimation(animation2, box1);
然后按顶部的 运行 按钮。
然后按下支付按钮将运行两个动画在同一个网格上。
我用三个动画设置这个循环,第一个在初始屏幕加载时运行 (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;
}
});
或者这是否需要一种不同的方法?
Babylon Group Animations 可能对您有用 - https://doc.babylonjs.com/how_to/group。它是一种对动画和可动画对象进行分组、然后规范化并一起控制它们的方法。
您可以在此处查看示例 - https://www.babylonjs-playground.com/#CBGEQX#5
如果您想在一个动画(网格)上同时看到 2 个动画 运行ning,请将第 79 行从
更改为animationGroup.addTargetedAnimation(animation2, box2);
到
animationGroup.addTargetedAnimation(animation2, box1);
然后按顶部的 运行 按钮。
然后按下支付按钮将运行两个动画在同一个网格上。