// My first Phaser game const config = { type: Phaser.AUTO, width: 800, // Customizing the world dimensions height: 600, physics: { default: 'arcade', arcade: { gravity: { y: 300 }, debug: false } }, scene: { preload: preload, create: create, update: update } }; // Creating game instance const game = new Phaser.Game(config); // Game variables let player; let stars; let platforms; let score = 0; let scoreText; function preload() { // Loading assets this.load.image('sky', 'assets/sky.png'); this.load.image('ground', 'assets/platform.png'); this.load.image('star', 'assets/star.png'); this.load.spritesheet('dude', 'assets/dude.png', { frameWidth: 32, frameHeight: 48 } ); } function create() { // Adding background this.add.image(400, 300, 'sky'); // Creating platforms group platforms = this.physics.add.staticGroup(); // Creating ground platforms.create(400, 568, 'ground').setScale(2).refreshBody(); // Adding platforms platforms.create(600, 400, 'ground'); platforms.create(50, 250, 'ground'); platforms.create(750, 220, 'ground'); // Creating player player = this.physics.add.sprite(100, 450, 'dude'); player.setBounce(0.2); player.setCollideWorldBounds(true); // Player animations this.anims.create({ key: 'left', frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }), frameRate: 10, repeat: -1 }); this.anims.create({ key: 'turn', frames: [{ key: 'dude', frame: 4 }], frameRate: 20 }); this.anims.create({ key: 'right', frames: this.anims.generateFrameNumbers('dude', { start: 5, end: 8 }), frameRate: 10, repeat: -1 }); // Adding collectible stars stars = this.physics.add.group({ key: 'star', repeat: 11, setXY: { x: 12, y: 0, stepX: 70 } }); stars.children.iterate(function (child) { child.setBounceY(Phaser.Math.FloatBetween(0.4, 0.8)); }); // Setting up collisions this.physics.add.collider(player, platforms); this.physics.add.collider(stars, platforms); this.physics.add.overlap(player, stars, collectStar, null, this); // Adding score display scoreText = this.add.text(16, 16, 'Score: 0', { fontSize: '32px', fill: '#fff' }); } function update() { // Getting keyboard input const cursors = this.input.keyboard.createCursorKeys(); // Custom movement values const moveSpeed = 160; const jumpStrength = -330; // Handling player movement if (cursors.left.isDown) { player.setVelocityX(-moveSpeed); player.anims.play('left', true); } else if (cursors.right.isDown) { player.setVelocityX(moveSpeed); player.anims.play('right', true); } else { player.setVelocityX(0); player.anims.play('turn'); } if (cursors.up.isDown && player.body.touching.down) { player.setVelocityY(jumpStrength); } } function collectStar(player, star) { star.disableBody(true, true); score += 10; scoreText.setText('Score: ' + score); // Making stars move to new positions if (stars.countActive(true) === 0) { stars.children.iterate(function (child) { child.enableBody(true, child.x, 0, true, true); }); } }