class Example extends Phaser.Scene { logo; text; prevDirection direction; maxY = 0; minY = 600; lastY = 0; duration = 0; prevDuration = 0; preload () { this.load.setBaseURL('https://cdn.phaserfiles.com/v355'); this.load.image('logo', 'assets/sprites/phaser3-logo.png'); this.load.image('marker', 'assets/sprites/longarrow.png'); } create () { this.logo = this.physics.add.image(400, 100, 'logo'); this.logo.setOrigin(0.5, 0); this.logo.setVelocity(0, 60); this.logo.setBounce(1, 1); this.logo.setCollideWorldBounds(true); this.lastY = this.logo.y; this.text = this.add.text(10, 10, '', { font: '16px Courier', fill: '#00ff00' }); // this.physics.world.timeScale = 0.1; // this.sys.events.on('postupdate', update, this); } update (time, delta) { this.text.setText([ 'steps: ' + this.physics.world._lastCount, 'this.duration: ' + this.prevDuration, 'last y: ' + this.lastY, 'min y: ' + this.minY, 'max y: ' + this.maxY ]); if (Phaser.Math.Fuzzy.LessThan(this.logo.body.velocity.y, 0, 0.1)) { this.direction = 'up'; } else { this.direction = 'down'; } if (this.prevDirection !== this.direction && this.prevDirection === 'up') { var marker = this.add.sprite(0, this.logo.y + 18, 'marker'); marker.setOrigin(0, 1); this.lastY = this.logo.y; this.prevDuration = this.duration; this.duration = 0; } this.prevDirection = this.direction; this.duration += delta; this.minY = Math.min(this.minY, this.logo.y); this.maxY = Math.max(this.minY, this.maxY, this.lastY); } } const config = { type: Phaser.AUTO, width: 800, height: 600, parent: 'phaser-example', physics: { default: 'arcade', arcade: { gravity: { y: 150 } } }, scene: Example }; const game = new Phaser.Game(config);
Scan to open on your mobile device
class Example extends Phaser.Scene { logo; text; prevDirection direction; maxY = 0; minY = 600; lastY = 0; duration = 0; prevDuration = 0; preload () { this.load.setBaseURL('https://cdn.phaserfiles.com/v355'); this.load.image('logo', 'assets/sprites/phaser3-logo.png'); this.load.image('marker', 'assets/sprites/longarrow.png'); } create () { this.logo = this.physics.add.image(400, 100, 'logo'); this.logo.setOrigin(0.5, 0); this.logo.setVelocity(0, 60); this.logo.setBounce(1, 1); this.logo.setCollideWorldBounds(true); this.lastY = this.logo.y; this.text = this.add.text(10, 10, '', { font: '16px Courier', fill: '#00ff00' }); // this.physics.world.timeScale = 0.1; // this.sys.events.on('postupdate', update, this); } update (time, delta) { this.text.setText([ 'steps: ' + this.physics.world._lastCount, 'this.duration: ' + this.prevDuration, 'last y: ' + this.lastY, 'min y: ' + this.minY, 'max y: ' + this.maxY ]); if (Phaser.Math.Fuzzy.LessThan(this.logo.body.velocity.y, 0, 0.1)) { this.direction = 'up'; } else { this.direction = 'down'; } if (this.prevDirection !== this.direction && this.prevDirection === 'up') { var marker = this.add.sprite(0, this.logo.y + 18, 'marker'); marker.setOrigin(0, 1); this.lastY = this.logo.y; this.prevDuration = this.duration; this.duration = 0; } this.prevDirection = this.direction; this.duration += delta; this.minY = Math.min(this.minY, this.logo.y); this.maxY = Math.max(this.minY, this.maxY, this.lastY); } } const config = { type: Phaser.AUTO, width: 800, height: 600, parent: 'phaser-example', physics: { default: 'arcade', arcade: { gravity: { y: 150 } } }, scene: Example }; const game = new Phaser.Game(config);