const config = { type: Phaser.AUTO, scale: { mode: Phaser.Scale.RESIZE, width: 1920, height: 1080, }, parent: 'game', backgroundColor: '#111', physics: { default: 'arcade', arcade: { gravity: { y: 0 }, debug: false } }, scene: { preload: preload, create: create, update: update }, pixelArt: true }; const game = new Phaser.Game(config); let ship; let cursors; let bullets; let bulletSpeed = 500; let thrustSpeed = 200; function preload() { // Load assets here if needed this.load.image('ship', 'assets/player.png'); this.load.image('player-thrust', 'assets/player-thrust.png'); this.load.image('starfield', 'assets/starfield.png'); } function create() { // Prevent right-click context menu this.input.on('contextmenu', (event) => { event.preventDefault(); }); // Change cursor to custom reticle (you need a 'reticle.png' image) this.input.setDefaultCursor('url(assets/reticle.png), auto'); // Create the spaceship ship = this.physics.add.sprite(400, 300, 'ship'); ship.setCollideWorldBounds(true); ship.setDisplaySize(48, 48); // Create bullet group bullets = this.add.group({ classType: Phaser.Physics.Arcade.Sprite, key: 'bullet', repeat: 10, setXY: { x: 0, y: 0, stepX: 0, stepY: 0 } }); // Set bullet properties bullets.getChildren().forEach(bullet => { bullet.setActive(false); bullet.setVisible(false); }); // Input handling this.input.on('pointerdown', (pointer) => { if (pointer.leftButtonDown()) { fireBullet(); } else if (pointer.rightButtonDown()) { ship.setVelocity(0, 0); ship.setAcceleration(0, 0); ship.setDrag(0); } }); // Mouse movement this.input.on('pointermove', (pointer) => { const angle = Phaser.Math.Angle.Between( ship.x, ship.y, pointer.x, pointer.y ); ship.setRotation(angle); }); } function update(time, delta) { // Thrust on right click - continuous movement towards the mouse if (this.input.activePointer.rightButtonDown()) { const angle = Phaser.Math.Angle.Between( ship.x, ship.y, this.input.activePointer.x, this.input.activePointer.y ); ship.setVelocity( Math.cos(angle) * thrustSpeed, Math.sin(angle) * thrustSpeed ); } else { // If not thrusting, apply drag to slow down ship.setDrag(100); } } function fireBullet() { const bullet = bullets.getFirstDead(); if (bullet) { bullet.setPosition(ship.x, ship.y); bullet.setActive(true); bullet.setVisible(true); // Set direction based on the ship's rotation const angle = ship.rotation; bullet.setVelocity( Math.cos(angle) * bulletSpeed, Math.sin(angle) * bulletSpeed ); } }