Tween Stagger Showcase
A demonstration of the different configurations available for stagger tweens, showcasing how to apply delays across a grid using various start points, ranges, and easing functions.
800 × 600
class Example extends Phaser.Scene
{
constructor ()
{
super();
}
preload ()
{
this.load.setBaseURL('https://cdn.phaserfiles.com/v410');
this.load.image('bg', 'assets/skies/darkstone.png');
this.load.image('block', 'assets/sprites/32x32-white.png');
}
create ()
{
this.add.image(400, 300, 'bg');
const hsv = Phaser.Display.Color.HSVColorWheel();
const gw = 16;
const gh = 16;
const bs = 32;
const group = this.add.group({
key: 'block',
quantity: gw * gh,
gridAlign: {
width: gw,
height: gh,
cellWidth: bs,
cellHeight: bs,
x: (800 - (bs * gw)) / 2,
y: (600 - (bs * gh) + bs / 2) / 2
}
});
const size = gw * gh;
// Tint them
group.getChildren().forEach((child, index) => {
const c = Math.floor(index * (360 / size));
child.setTint(hsv[c].color);
});
this.variations = [
[ 200, { grid: [ gw, gh ], from: 'first' } ],
[ 200, { grid: [ gw, gh ], from: 'center' } ],
[ 200, { grid: [ gw, gh ], from: 'last' } ],
[ 30, { from: 'center' } ],
[ 30, { from: 'first' } ],
[ 30, { from: 'last' } ],
[ 30, { from: 201 } ],
[ 30, { from: 46 } ],
[ 30, { ease: 'quad.out' } ],
[ 30, { ease: 'quart.in' } ],
[ 30, { ease: 'sine.inout' } ],
[ 30, { from: 'last', ease: 'quad.inout' } ],
[ [ 1500, 3000 ] ],
[ [ 0, 5000 ], { from: 'center' } ],
[ 20, { ease: 'cubic.inout', from: 'center' } ],
[ [ 500, 5000 ], { from: 'center' } ],
[ 20, { ease: 'power2', from: 'center' } ],
[ [ 100, 600 ], { ease: 'cubic.inout' } ],
];
const text = this.add.text(400, 24, '', { font: '18px Courier', fill: '#ffffff' }).setOrigin(0.5);
this.getStaggerTween(0, group, text);
}
getStaggerTween (i, group, text)
{
const stagger = this.variations[i];
text.setText(`this.tweens.stagger(${JSON.stringify(stagger[0])}, ${JSON.stringify(stagger[1])})`);
this.tweens.add({
targets: group.getChildren(),
scale: 0.2,
ease: 'linear',
duration: 500,
delay: this.tweens.stagger(...stagger),
completeDelay: 1000,
onComplete: () =>
{
group.getChildren().forEach(child => {
child.setScale(1);
});
if (i < this.variations.length - 1)
{
i++;
}
else
{
i = 0;
}
this.getStaggerTween(i, group, text);
}
});
}
}
const config = {
scale: { mode: Phaser.Scale.FIT },
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'game-container',
scene: Example
};
const game = new Phaser.Game(config);