How to make laser kill enemies and have a shooting cool-down for the gun

In my game so far I have a laser that shoots out of the player x and y position

  if(this.cursors.space.isDown && this.player.flipX == false) {
      this.laser = this.physics.add.sprite(this.player.x + 30, this.player.y - 5, 'tracer').setScale(0.08);
      this.laser.body.allowGravity = false;
      this.laser.setVelocityX(200);
    }
 
    if(this.cursors.space.isDown && this.player.flipX == true) {
      this.laser = this.physics.add.sprite(this.player.x - 30, this.player.y - 5, 'tracer').setScale(.08);
      this.laser.flipX = true;
      this.laser.body.allowGravity = false;
      this.laser.setVelocityX(-200);
    }  


this is just making the laser shoot out but is not interacting with the enemies by killing them.
I also want to add a cool down to the shooting because the laser can keep on being shot out nonstop.

please respond as soon as possible, thank you.

Something like

if (this.laser) {
  this.physics.overlap(this.laser, this.enemies, (laser, enemy) => {
    enemy.destroy();
    this.laser.destroy();
    this.laser = null;
  });
}

If only one laser is allowed you need to destroy any existing one before creating another.

A cooldown pattern is


function create() {
  this.canShoot = true;
}

function update() {
  if (this.canShoot && shootButton.isDown) {
    // [Create the laser etc.]
    this.canShoot = false;
    this.time.delayedCall(1000, () => {
      this.canShoot = true;
    });
  }
}

This might sound like a dumb question but, do I write canShoot like you said so or do I have to replace it with something else?

You should add this.canShoot to your own scene’s create() and update() methods. It’s a scene property you’re creating, so you could name it something else.

shootButton I made up, so that should be this.cursors.space, as you already have.

the cooldown pattern now works just fine but the code where the laser kills the enemies does not work, it kills the enemies but then the game freezes and stops working. Here is the code that I put in my update.

if (this.laser) {
this.physics.overlap(this.laser, this.enemies, (laser, enemy) => {
enemy.destroy();
this.laser.destroy();
this.laser = null;
});
}

Check the browser console for errors.

there are no errors showed in the browser console.

do you know how to fix it?
here is the full code



class second extends Phaser.Scene {
    constructor() {
      super("gamePart2");
    }  
 
   preload() {
    console.log('connected');
    this.load.image('bg', './resources/scriptJS/assets/mars.jpg');
 
 
    this.load.spritesheet('spaceP', './resources/scriptJS/assets/spritesheet.png', { frameWidth: 122.4, frameHeight: 136 });
    this.load.spritesheet('enemy', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy1', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy2', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy3', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy4', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy5', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy6', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy7', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy8', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy9', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
    this.load.spritesheet('enemy10', './resources/scriptJS/assets/enemy1.png', { frameWidth: 48, frameHeight: 64 });
   
    this.load.image('restartButton', './resources/scriptJS/assets/restartButton.png');
    this.load.image('backMenu', './resources/scriptJS/assets/menu.png');
 
    this.load.image('tracer', './resources/scriptJS/assets/laser.png');
    this.load.image('homeback', './resources/scriptJS/assets/homebackground.gif');
    this.load.image('jail', './resources/scriptJS/assets/jailBase.png');
    this.load.image('game_Over', './resources/scriptJS/assets/game_Over.jpg');
 
  }
 
 
 
 
 
 
 
   create() {
 
    console.log('connected2 yay');


    this.bg = this.add.image(0, 0, 'bg').setOrigin(0);
    this.bg = this.add.image(0, 600, 'bg').setOrigin(0);
    this.bg = this.add.image(600, 0, 'bg').setOrigin(0);
    this.bg = this.add.image(600, 600, 'bg').setOrigin(0);
    this.bg = this.add.image(0, 1200, 'bg').setOrigin(0);
    this.bg = this.add.image(1200, 0, 'bg').setOrigin(0);
    this.bg = this.add.image(1200, 1200, 'bg').setOrigin(0);
    this.bg = this.add.image(600, 1200, 'bg').setOrigin(0);
    this.bg = this.add.image(1200, 600, 'bg').setOrigin(0);
 
   
    this.jail = this.add.image(150,70, 'jail');


   
    this.player = this.physics.add.sprite(285, 140, 'spaceP').setScale(.5);
    this.player.body.allowGravity = false;
    this.player.setCollideWorldBounds(true);
 
  //enemy Sprites
 
 
 
    this.enemy = this.physics.add.sprite(600, 800,  'enemy').setScale(.9);
    this.enemy.setCollideWorldBounds(true);
 
    this.enemy1 = this.physics.add.sprite(700, 400, 'enemy1').setScale(.9);
    this.enemy1.setCollideWorldBounds(true);
 
    this.enemy2 = this.physics.add.sprite(800, 200, 'enemy2').setScale(.9);
    this.enemy2.setCollideWorldBounds(true);
 
    this.enemy3 = this.physics.add.sprite(555, 300, 'enemy3').setScale(.9);
    this.enemy3.setCollideWorldBounds(true);
 
    this.enemy4 = this.physics.add.sprite(800, 100, 'enemy4').setScale(.9);
    this.enemy4.setCollideWorldBounds(true);
 
    this.enemy5 = this.physics.add.sprite(599, 400, 'enemy5').setScale(.9);
    this.enemy5.setCollideWorldBounds(true);
 
    this.enemy6 = this.physics.add.sprite(698, 676, 'enemy6').setScale(.9);
    this.enemy6.setCollideWorldBounds(true);
 
    this.enemy7 = this.physics.add.sprite(778, 845, 'enemy7').setScale(.9);
    this.enemy7.setCollideWorldBounds(true);
 
    this.enemy8 = this.physics.add.sprite(456, 789, 'enemy8').setScale(.9);
    this.enemy8.setCollideWorldBounds(true);
 
    this.enemy9 = this.physics.add.sprite(1000, 600, 'enemy9').setScale(.9);
    this.enemy9.setCollideWorldBounds(true);
 
    this.enemy10 = this.physics.add.sprite(600, 600, 'enemy10').setScale(.9);
    this.enemy10.setCollideWorldBounds(true);
 
   
 
   
 
    this.cameras.main.setZoom(1.5);
   this.cameras.main.setBounds(0, 0, 600 * 2, 600 * 2, true, true, true, true);
 
   //border problem fixed here
   this.physics.world.setBounds(0, 0, 578 * 2, 578 * 2, true, true, true, true);
 
   this.cameras.main.startFollow(this.player, true, 0.5, 0.5)
   
   
     
 
  //player Animation
 
    this.anims.create({
        key: 'left',
        frames: this.anims.generateFrameNumbers('spaceP', { start: 0, end: 11 }),
        frameRate: 20,
        repeat: -1
    });
 
   
    this.anims.create({
        key: 'turn',
        frames: [ { key: 'spaceP', frame: 12 } ],
        frameRate: 20
    });
 
    this.anims.create({
        key: 'right',
        frames: this.anims.generateFrameNumbers('spaceP', { start: 0, end: 11 }),
        frameRate: 20,
        repeat: -1
    });
 
   
 
    this.anims.create({
        key: 'up',
        frames: this.anims.generateFrameNumbers('spaceP', { start: 12, end: 14 }),
        frameRate: 20,
        repeat: -1
 
    });
 
    this.anims.create({
        key: 'down',
        frames: this.anims.generateFrameNumbers('spaceP', { start: 12, end: 14 }),
        frameRate: 20,
        repeat: -1
 
    });
   
   
     
    this.cursors = this.input.keyboard.createCursorKeys();
 
   
    this.enemy.setCollideWorldBounds(true);
 
    this.enemy1.setCollideWorldBounds(true);
   
    this.enemy2.setCollideWorldBounds(true);


    this.enemy3.setCollideWorldBounds(true);
 
    this.enemy4.setCollideWorldBounds(true);
 
    this.enemy5.setCollideWorldBounds(true);
 
    this.enemy6.setCollideWorldBounds(true);
 
    this.enemy7.setCollideWorldBounds(true);
 
    this.enemy8.setCollideWorldBounds(true);
 
    this.enemy9.setCollideWorldBounds(true);


    this.enemy10.setCollideWorldBounds(true);
 
 
 
 
    this.physics.add.collider(this.player, this.enemy, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy1, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy2, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy3, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy4, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy5, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy6, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy7, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy8, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy9, this.playerDie, null, this);
    this.physics.add.collider(this.player, this.enemy10, this.playerDie, null, this);
 
    this.canShoot = true;                                                                                                                                                                                                                                                                                                                                                                                                  
 
  }






  enemyFollows() {
    this.physics.moveToObject(this.enemy, this.player, 50);
    this.physics.moveToObject(this.enemy1, this.player, 50);
    this.physics.moveToObject(this.enemy2, this.player, 50);
    this.physics.moveToObject(this.enemy3, this.player, 50);
    this.physics.moveToObject(this.enemy4, this.player, 50);
    this.physics.moveToObject(this.enemy5, this.player, 50);
    this.physics.moveToObject(this.enemy6, this.player, 50);
    this.physics.moveToObject(this.enemy7, this.player, 50);
    this.physics.moveToObject(this.enemy8, this.player, 50);
    this.physics.moveToObject(this.enemy9, this.player, 50);
    this.physics.moveToObject(this.enemy10, this.player, 50);
   
  }


 
   playerDie(player, enemy) {
   
    this.physics.pause();
    var square = this.add.graphics();
   
   
// x and y positions
const x = this.cameras.main.worldView.x + this.cameras.main.width / 2 - 400;
const y = this.cameras.main.worldView.y + this.cameras.main.height / 2  - 250;


const widthQ = this.cameras.main.worldView.x + this.cameras.main.width / 2 - 500;
const heightQ = this.cameras.main.worldView.y + this.cameras.main.height / 2 - 300;


const xB = this.cameras.main.worldView.x + this.cameras.main.width / 2 - 230;
const yB = this.cameras.main.worldView.y + this.cameras.main.height / 2 - 150;


const xB2 = this.cameras.main.worldView.x + this.cameras.main.width / 2 - 230;
const yB2 = this.cameras.main.worldView.y + this.cameras.main.height / 2 - 50;




//text


    this.add.text(x, y, 'Game Over ', {
      fontFamily: 'Roboto Flex',
      fontSize: '70px',
      color: '#000000',
      fontStyle: 'normal',
      align: 'center',
      shadow: { offsetX: 10, offsetY: 5, color: '#0000FF', fill: true, blur: 2 },
      padding: { left: null },
      wordWrap: { width: 0 },
      fixedWidth: 600
    }).setOrigin(0.5);




//buttons


    const helloButton = this.add.image(xB, yB, 'restartButton').setScale(0.1);
    helloButton.setOrigin(0.5);
    helloButton.setInteractive();
    helloButton.on('pointerup', () => { this.scene.start("play"); });


   
    const Button = this.add.image(xB2, yB2, 'backMenu').setScale(0.5);
    Button.setOrigin(0.5);
    Button.setInteractive();
    Button.on('pointerup', () => { this.scene.start("StartGame"); });




    //bg
    square.fillStyle(0x222222, 0.8);
square.fillRect(widthQ, heightQ, 550, 305).setOrigin(0.5);
 








 
  }
 
 
   update() {
 
  this.enemyFollows();
 
 
 


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy, (laser, enemy) => {
        enemy.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy1, (laser, enemy1) => {
        enemy1.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy2, (laser, enemy2) => {
        enemy2.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy3, (laser, enemy3) => {
        enemy3.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy4, (laser, enemy4) => {
        enemy4.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy5, (laser, enemy5) => {
        enemy5.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy6, (laser, enemy6) => {
        enemy6.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy7, (laser, enemy7) => {
        enemy7.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy8, (laser, enemy8) => {
        enemy8.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy9, (laser, enemy9) => {
        enemy9.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }


    if (this.laser) {
      this.physics.overlap(this.laser, this.enemy10, (laser, enemy10) => {
        enemy10.destroy();
        this.laser.destroy();
        this.laser = null;
      });
    }
   






   
    if (this.canShoot && this.cursors.space.isDown && this.player.flipX == false) {
      this.laser = this.physics.add.sprite(this.player.x + 30, this.player.y - 5, 'tracer').setScale(0.08);
      this.laser.body.allowGravity = false;
      this.laser.setVelocityX(200);
      this.canShoot = false;
      this.time.delayedCall(500, () => {
        this.canShoot = true;
      });
    }


       
    if (this.canShoot && this.cursors.space.isDown && this.player.flipX == true) {
      this.laser = this.physics.add.sprite(this.player.x - 30, this.player.y - 5, 'tracer').setScale(0.08);
      this.laser.flipX = true;
      this.laser.body.allowGravity = false;
      this.laser.setVelocityX(-200);
      this.canShoot = false;
      this.time.delayedCall(500, () => {
        this.canShoot = true;
      });
    }
   
   
   
    if(this.cursors.left.isDown) {
        this.player.setVelocityX(-110);
        this.player.anims.play('left', true);
        this.player.flipX = true;
      } else if (this.cursors.right.isDown) {
           this.player.setVelocityX(110);
           this.player.anims.play('right', true);
           this.player.flipX = false;
           } else {
            this.player.setVelocityX(0);
            this.player.anims.play('right', false);
        }  
       
        if (this.cursors.up.isDown) {
            this.player.setVelocityY(-110);
            this.player.anims.play('up', true);
          } else {
            this.player.setVelocityY(0);
          }
         
         
        if  (this.cursors.down.isDown) {
        this.player.setVelocityY(110);
        this.player.anims.play('down', true);
     }
 
  }
  }
 
 
  var config = {
    type: Phaser.AUTO,
    width: 1350,
    height: 640,
    physics: {
      default: 'arcade',
      arcade: {
        gravity: { y: 600 },
        enableBody: true,
        debug: false,
      }
    },
    scene: [home, menu, controls, first, second]
  };
 
  var game = new Phaser.Game(config);
 


please answer as soon as possible.

You should try Discord if you need quicker responses. :slight_smile:

Thank you for the help appreciate it :slight_smile: