Sometimes it's useful to run actions in parallel to produce scripted behavior.
Parallel actions can be constructed from a list of stand-alone actions or ActionSequences.
const actor = new ex.Actor({...});
const moveInBox = new ex.ActionSequence(actor, ctx => {
ctx.easeBy(ex.vec(200, 0), 1000, ex.EasingFunctions.EaseInOutCubic);
ctx.delay(500);
ctx.easeBy(ex.vec(0, 200), 1000, ex.EasingFunctions.EaseInOutCubic);
ctx.delay(500);
ctx.easeBy(ex.vec(-200, 0), 1000, ex.EasingFunctions.EaseInOutCubic);
ctx.delay(500);
ctx.easeBy(ex.vec(0, -200), 1000, ex.EasingFunctions.EaseInOutCubic);
ctx.delay(500);
});
const rotateAroundBackAndForth = new ex.ActionSequence(actor, ctx => {
ctx.rotateBy(Math.PI, Math.PI, ex.RotationType.Clockwise);
ctx.delay(500);
ctx.rotateBy(Math.PI, Math.PI, ex.RotationType.CounterClockwise);
ctx.delay(500);
ctx.rotateBy(Math.PI, Math.PI, ex.RotationType.Clockwise);
ctx.delay(500);
ctx.rotateBy(Math.PI, Math.PI, ex.RotationType.CounterClockwise);
ctx.delay(500);
});
const parallel = new ex.ParallelActions([moveInBox, rotateAroundBackAndForth]);
actor.actions.runAction(parallel);