Jump to content

Can't get collision working


Recommended Posts

Hey, I'm relatively new to Phaser, it'd be great if anyone could help with getting the collision between the user and the laserBoundaries group to work. The main code is below:





var user;
var laserBoundaries;
var collisionHandler;
var Level1State = {
    create: function(){
    var backdrop = game.add.image(0, 0, 'backdrop'); 
    var exit = game.add.image(1066, 3156, 'staircaseexit');
    var bomb = game.add.image(900, 25, 'bomb');
    game.world.setBounds(0, 0, 1152, 3240);
    user = game.add.sprite(560, 5, 'player');
    game.physics.enable(user, Phaser.Physics.ARCADE);
    user.body.collideWorldBounds = true;
    laserBoundaries = this.add.group();
    game.physics.enable(laserBoundaries, Phaser.Physics.ARCADE);
    var laser1 = game.add.image(650, 273, 'laser');
    var laser2 = game.add.image(650, 0, 'laser2');
    var laser3 = game.add.image(470, 0, 'laser2');
    var laser4 = game.add.image(72, 273, 'laser');

cursors = game.input.keyboard.createCursorKeys();


    update: function(){
        game.physics.arcade.overlap(user, laserBoundaries, collisionHandler, null, this);

        if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT))
        user.x = user.x-4;
    else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) 

        user.x = user.x+4;

    if (game.input.keyboard.isDown(Phaser.Keyboard.UP))
        user.y = user.y-4;
    else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN))
        user.y = user.y+4;

    collisionHandler: function() {



Link to comment
Share on other sites

A couple of things noticeable:

-Your using images instead of sprites.
- Adding physics to group objects can be done by using game.add.physicsGroup(), enabling them on each body individually or by ysing enableBody, but not by enabling physics on the group:

     //you can do this
     laserBoundaries = this.add.group();
     laserBoundaries.enableBody = true;

    //or the above in one line
    laserBoundaries = this.add.physicsGroup();
    //but this won't have any effect.
    game.physics.enable(laserBoundaries, Phaser.Physics.ARCADE);

    var laser1 = game.add.sprite(650, 273, 'laser');//change to sprite
    var laser2 = game.add.sprite(650, 0, 'laser2');//change to sprite
    var laser3 = game.add.sprite(470, 0, 'laser2');//change to sprite
    var laser4 = game.add.sprite(72, 273, 'laser');//change to sprite

- collisionHandler is called, but it is never defined (the global variable is not required, you have defined it within your state object). try calling the right function:

        console.log(collisionHandler); //will show undefined
        console.log(this.collisionHandler);//will show the correct one
        game.physics.arcade.overlap(user, laserBoundaries,this.collisionHandler); //this will work


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...