Collision Detection Code Structure with Sloped Tiles
- by ProgrammerGuy123
Im making a 2D tile based game with slopes, and I need help on the collision detection. This question is not about determining the vertical position of the player given the horizontal position when on a slope, but rather the structure of the code.
Here is my pseudocode for the collision detection:
void Player::handleTileCollisions()
{
int left = //find tile that's left of player
int right = //find tile that's right of player
int top = //find tile that's above player
int bottom = //find tile that's below player
for(int x = left; x <= right; x++)
{
for(int y = top; y <= bottom; y++)
{
switch(getTileType(x, y))
{
case 1: //solid tile
{
//resolve collisions
break;
}
case 2: //sloped tile
{
//resolve collisions
break;
}
default: //air tile or whatever else
break;
}
}
}
}
When the player is on a sloped tile, he is actually inside the tile itself horizontally, that way the player doesn't look like he is floating. This creates a problem because when there is a sloped tile next to a solid square tile, the player can't move passed it because this algorithm resolves any collisions with the solid tile. Here is a gif showing this problem:
So what is a good way to structure my code so that when the player is inside a sloped tile, solid tiles get ignored?