Sign in to follow this  
Eagers

Using LockConstraint to make a P2 sprite draggable

Recommended Posts

Hello all and thanks ahead of time for any help.

This example has a block you move around with the arrow keys and it bumps into other objects: https://phaser.io/examples/v2/p2-physics/contact-events

I am trying to make the block draggable by a mouse (or touch).

I added this code to create() to create a transparent copy of the box (for visualization/testing purposes, this sprite would eventually be invisible)

     input_body = game.add.sprite(500, 200, 'block');
     game.physics.p2.enable(input_body, false);
     input_body.body.setCollisionGroup(	game.physics.p2.createCollisionGroup() );
	 input_body.alpha = 0.5;

And then I added this code to update() to make my transparent box follow the mouse point, or last touch point

  input_body.body.x = game.input.x;
  input_body.body.y = game.input.y;

And then I added this code to update() to make the block follow my mouse on drag. 

if (game.input.activePointer.isDown) {
    if (constraint_count == 0) {
      input_constraint = game.physics.p2.createLockConstraint(input_body, block.body);
      constraint_count = 1;
    } else if (constraint_count == 1) {
      game.physics.p2.removeConstraint(input_constraint);
      constraint_count = 0;
    }
  } else {
    if (constraint_count == 1) {
      game.physics.p2.removeConstraint(input_constraint);
    }
    constraint_count = 0;
  }

And it works!!...but what happens is my mouse pointer and my transparent block (input_body) get out of sync.  And the input_body ends up sort of halfway between the block and the mouse pointer.  Letting go of the mouse (which removes the constraint) leaves the input_body at the same offset from the mouse pointer.  Once I click, it never lines up again.

I'm guessing I'm missing something with the LockConstraint, and the block is acting like an achor weighing down my drag.  But I'm not sure how to fix it.

Thanks for any and all help!

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.