Simply set up more animations and add to the BabylonJs object's animations array.
For example adding a rotation animation to the very simple slide animation -
var yRot = new BABYLON.Animation("yRot", "rotation.y", frameRate, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
var keyFramesR = [];
keyFramesR.push({
frame: 0,
value: 0
});
keyFramesR.push({
frame: frameRate,
value: Math.PI
});
keyFramesR.push({
frame: 2 * frameRate,
value: 2 * Math.PI
});
yRot.setKeys(keyFramesR);
Playground Example Slide and Rotate -
Changing the rotation values to larger numbers increases the rotation rate
var yRot = new BABYLON.Animation("yRot", "rotation.y", frameRate, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
var keyFramesR = [];
keyFramesR.push({
frame: 0,
value: 0
});
keyFramesR.push({
frame: frameRate,
value: 4 * Math.PI
});
keyFramesR.push({
frame: 2 * frameRate,
value: 8 * Math.PI
});
yRot.setKeys(keyFramesR);
Playground Example Slide and Faster Rotate -
Changing the second key frame position to nearer the end of the frames gives a varying rotation rate.
var yRot = new BABYLON.Animation("yRot", "rotation.y", frameRate, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
var keyFramesR = [];
keyFramesR.push({
frame: 0,
value: 0
});
keyFramesR.push({
frame: 1.5 * frameRate,
value: 4 * Math.PI
});
keyFramesR.push({
frame: 2 * frameRate,
value: 8 * Math.PI
});
yRot.setKeys(keyFramesR);
Playground Example Slide and Varying Rotation Rate -
In order to have one animation follow another then a further parameter needs to be added to the beginDirectAnimation function. This parameter is itself a function to be called when the animation began by beginDirectAnimation is ended.
In fact two new parameters are needed since the function to be called is the sixth parameter and so the fifth parameter position needs to be filled.
scene.beginAnimation(target, start frame, end frame, loop, speed, on animation end);
target - BabylonJS Object, the BabylonJS object to be animated
animations - array, of all the animations to apply to the target
start frame - number, the frame at which to start the animation
end frame - number, the frame at which to end the animation
loop - boolean : optional, true when loop mode of the animation is to be activated, false to run animation just once
speed - number : optional, default 1 matches animation frame rate, higher numbers speed up the animation, lower numbers slow it down
on animation end - function : optional, function called when animation ends, requires loop to be false
The following are alterations to Slide and Rotate -
In the first example the box rotates for 5 seconds then goes into a looped slide.
Code changes to beginDirectAnimation are looping becomes false, speed maintained as default 1, and the function nextAnimation is called as the first ends.
scene.beginDirectAnimation(box, [yRot], 0, 2 * frameRate, false, 1, nextAnimation);
Additional function added before this is
var nextAnimation = function() {
scene.beginDirectAnimation(box, [xSlide], 0, 2 * frameRate, true);
}
Playground Example Consecutive Animations Rotate then Slide -
In the second example the rotation is continued as the box goes into a looped slide.
var nextAnimation = function() {
scene.beginDirectAnimation(box, [yRot, xSlide], 0, 2 * frameRate, true);
}
Playground Example Consecutive Animations Rotate then Rotate and Slide -