Friday, March 18, 2016

architecture - Collision Detection Code Structure with Sloped Tiles


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:


Collision 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?




No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...