englercj / phaser-tiled

A tilemap implementation for phaser focusing on large complex maps built with the Tiled Editor.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Removing Collision from tile

The-Outrider opened this issue · comments

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 :).

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.

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. :(

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.

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.

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.

Sounds great 👍 thanks for all your work thus far!

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

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