Jump to content

Problems with Collision when the body is a circle


Landa
 Share

Recommended Posts

Hey guys,

I'm new to phaser and I'm not quite sure if this is a bug or a mistake of myself.
In this code if the player has a circle as his body and if he is colliding with one of this obstacles he won't get separated as it is described in the phaser documentation.
So if you move up and collide with the obstacle the console starts printing out true even if you stop moving.
In addition to that if you walk against an edge of the obstacle the player gets stuck on it and can't get away of that.

I'm confused because this doesn't happen if the players body is an rectangle.

Does anybody have an idea?

var game = new Phaser.Game(600, 600, Phaser.AUTO, "", {preload: preload, create: create, update: update});
var player;
var cursors;
var obstacles;

function preload(){
    game.load.image("robot", "player.png", 32, 48);
    game.load.image("obstacle", "box.png");
}
function create(){
    player = game.add.sprite(game.world.centerX, game.world.centerY + 200, "robot", 5);
    game.stage.backgroundColor = 'rgb(239, 228, 176)';

    game.physics.arcade.enable(player);

    player.body.setCircle(player.width/2);// player don`t get seperated in the collide function
    //player.body.setSize(player.width * 0.8, player.height*0.8,player.width * 0.1, player.height*0.1 ); //player get seperated in the collide function

    player.anchor.set(0.5);
    player.angle = -90;

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

    obstacles = game.add.group();
    game.physics.arcade.enable(obstacles);
    obstacles.enableBody = true;
    obstacles.create(game.world.centerX, game.world.centerY - 200, 'obstacle');
    obstacles.create(game.world.centerX - 190, game.world.centerY - 200, 'obstacle');
    obstacles.create(game.world.centerX + 150, game.world.centerY - 100, 'obstacle');
    obstacles.create(game.world.centerX - 130, game.world.centerY, 'obstacle');
    obstacles.create(game.world.centerX - 230, game.world.centerY, 'obstacle');
    obstacles.setAll('body.immovable', 'true');
    obstacles.setAll('anchor.x', '0.5');
    obstacles.setAll('anchor.y', '0.5');
}
function update(){

    game.debug.body(player);



    obstacles.forEach(function(item) {
       game.debug.body(item);
    });

    if (cursors.up.isDown) {
        game.physics.arcade.velocityFromAngle(player.angle, 200, player.body.velocity);
    } else {
        player.body.velocity.set(0);
    }
    if (cursors.left.isDown) {
       player.body.angularVelocity = -300;
    } else {
        if (cursors.right.isDown) {
            player.body.angularVelocity = 300;
        } else {
            player.body.angularVelocity = 0;
        }
    }

    game.physics.arcade.collide(player,obstacles,(p1,en)=>{
        console.log(true);
    }, null, this);
}

cheers landa

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

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