Jump to content

Line Collision


johncintron
 Share

Recommended Posts

I'm trying to implement a game where it's possible for a sprite to collide with a line object. For example:

game.physics.startSystem(Phaser.Physics.ARCADE);

sprite = game.add.sprite(0, 0, "mySprite");
sprite.body.gravity.y = 420;

foothold = new Phaser.Line(0, 600, 200, 400); // a diagonal line

/**
 * update = function() {
 *     collide sprite and foothold... HOW!?
 * };
 */

 

I want the sprite to collide with the diagonal line when the sprite falls onto it. Is this a possibility in arcade physics? There's an example of diagonal platforms here: http://www.phaser.io/examples/v2/ninja-physics/ninja-aabb-vs-tile but I do not want to use ninja physics.

Link to comment
Share on other sites

It doesn't work. Phaser.Line.intersectsRectangle(line, rect) is always false.

 

function startGame() {
    this.create = function() {
        line = new Phaser.Line(200, 500, 600, 500);
        rect = new Phaser.Rectangle(0, 0, 50, 50);
    };
    this.update = function() {
        console.log(Phaser.Line.intersectsRectangle(line, rect)); // NEVER TRUE!?
        if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT)) {
            rect.x -= 10;
        } else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) {
            rect.x += 10;
        } else if (game.input.keyboard.isDown(Phaser.Keyboard.UP)) {
            rect.y -= 10;
        } else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN)) {
            rect.y += 10;
        }
    };
    this.render = function() {
        game.debug.geom(line);
        game.debug.geom(rect);
    };
}

 

Link to comment
Share on other sites

@samme That's a good idea! You don't have to copy to a rectangle first, though, cuz that method relies on x, y, right, and bottom, which sprites and sprites' bodies have as well.

@johncintron Everything in your code looks right to me... If you create the rectangle and the line so they intersect from the start does it work? Like, if you don't depend on the keyboard to move them into intersection?

Link to comment
Share on other sites

@drhayes That doesn't work either. If i create both the line and rectangle such that they overlap in the `create` function, ` Phaser.Line.intersectsRectangle(line, rect)` is still false. I'm using Phaser 2.6.2 by the way.

 

For example

function startGame() {
    this.create = function() {
        line = new Phaser.Line(200, 500, 600, 500);
        rect = new Phaser.Rectangle(375, 475, 50, 50);
    };
    this.update = function() {
        console.log(Phaser.Line.intersectsRectangle(line, rect));
    };
    this.render = function() {
        game.debug.geom(line);
        game.debug.geom(rect);
    };
}

 

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.

Guest
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.

Loading...
 Share

  • Recently Browsing   0 members

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