Tween Performance Stress Test
A performance test demonstrating the engine handling thousands of tweening Blitter objects simultaneously, adding 256 new items per frame while the pointer is held down.
800 × 600
var scene = null;
var add = false;
var blitter;
var idx = 1;
var frame = 'veg01';
var numbers = [];
var text;
var tween;
class Example extends Phaser.Scene
{
constructor()
{
super();
}
preload()
{
this.load.setBaseURL('https://cdn.phaserfiles.com/v410');
this.load.atlas('atlas', 'assets/tests/fruit/veg.png', 'assets/tests/fruit/veg.json');
}
launch(i)
{
idx++;
if (idx === 38)
{
idx = 1;
}
if (idx < 10)
{
frame = 'veg0' + idx.toString();
}
else
{
frame = 'veg' + idx.toString();
}
var bob = blitter.create(i * 32, 0, frame);
scene.tweens.add({
targets: bob,
y: 650,
delay: Math.random() * 2,
ease: 'Sine.easeInOut',
repeat: -1,
yoyo: true
});
}
create()
{
scene = this;
numbers.push(this.add.image(0 * 48, 720, 'atlas', '0').setOrigin(0));
numbers.push(this.add.image(1 * 48, 720, 'atlas', '0').setOrigin(0));
numbers.push(this.add.image(2 * 48, 720, 'atlas', '0').setOrigin(0));
numbers.push(this.add.image(3 * 48, 720, 'atlas', '0').setOrigin(0));
numbers.push(this.add.image(4 * 48, 720, 'atlas', '0').setOrigin(0));
numbers.push(this.add.image(5 * 48, 720, 'atlas', '0').setOrigin(0));
blitter = this.add.blitter(0, 0, 'atlas');
this.updateDigits();
this.input.on('pointerdown', function ()
{
add = true;
});
this.input.on('pointerup', function ()
{
add = false;
});
}
update()
{
if (add)
{
for (var i = 0; i < 256; ++i)
{
this.launch(i);
}
this.updateDigits();
}
}
updateDigits()
{
var len = Phaser.Utils.String.Pad(blitter.children.length.toString(), 6, '0', 1);
numbers[0].setFrame(len[0]);
numbers[1].setFrame(len[1]);
numbers[2].setFrame(len[2]);
numbers[3].setFrame(len[3]);
numbers[4].setFrame(len[4]);
numbers[5].setFrame(len[5]);
}
}
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);