englercj / phaser-tiled

A tilemap implementation for phaser focusing on large complex maps built with the Tiled Editor.
MIT License
290 stars 31 forks source link

Removing Collision from tile #29

Closed Outridair closed 6 years ago

Outridair commented 9 years ago

So I'm using the collision method with my tileset file.

Add a property in Tiled on a specific tile called collision and set to true.

However there are times in game when I want to remove that collision body and I'm struggling to find a way to do this. Please help :).

englercj commented 9 years ago

Out of curiousity what have you tried? You should be able to get the tile object (which is a normal Phaser.Sprite) and turn off collisions for it, the same way you would a sprite.

Outridair commented 9 years ago

So I used the getTile method for a specific tile (based on my player sprite's x, y coordinates).

Then I tried setting the collideUp/Left/Down/Right properties to false, and the faceBottom,Up,Left,Right to false.

So then I tried just to remove the tile itself. Using the removeTile method, but while that visually removed the tile, it didn't remove the collision. Looking at the getTile method, theres no body attached to the tile itself. :(

Outridair commented 9 years ago

Apologies for my in-experience, I found the sprite 'bodies' in the Tilemap object under children[x].bodies, so this isn't an issue as far as I know, still not sure how to get that body though so it can be removed.

Outridair commented 9 years ago

Alright I was able to solve myself, but logging it here in case anyone needs/stumbled upon this. First I get the location of my sprite character:

var myPoint = new Phaser.Point(this.sprite.x +32, this.sprite.y);

my tilesize is 32 so I add this to get the tile to the right of my sprite -> Then I do a hittest and store it in a variable called collisionBody.

this.collisionBody = this.game.physics.p2.hitTest(myPoint); this.game.physics.p2.removeBody(this.collisionBody[0].parent);

Then I remove the Body by calling the parent of the collisionBody. Will need to turn off the optimization part for collisionBodies in the phaser-tiled call though... if I had a group of 3 sprites together it would remove the collision for all of them.

englercj commented 9 years ago

I'm glad you found a workaround for this! I'm (slowly) working on the next version of this lib which does some major refactoring of tiles for memory and startup performance improvements, and I want to keep this open as a reminder to make this easier.

Outridair commented 9 years ago

Sounds great :+1: thanks for all your work thus far!

MarkIVC commented 8 years ago

@The-Outrider Thank you for posting your results. I'm using your hit test approach to add/remove collision bodies for doors now.

Outridair commented 6 years ago

If this is no longer an updated project, I would like to close this issue. (Cleaning up my github history)