# AABB vs TileMap collision response

This topic is 2041 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi everyone!
I'm making a 2d tilemap game..and I have problems with aabb vs tilemap collision response..here's how I do it:

void handle_player_world_collision(Player* player,TileMap* map)
{
int topleft_xtile=map->xworld_to_map(player->pos.x);
int topleft_ytile=map->yworld_to_map(player->pos.y);
int bottright_xtile=map->xworld_to_map(player->pos.x+player->aabb.w);
int bottright_ytile=map->yworld_to_map(player->pos.y+player->aabb.h);

//we loop through all the tiles that the player's aabb touch
for(int i=topleft_xtile;i<bottright_xtile;i++)
{
for(int j=topleft_ytile;j<bottright_ytile;j++)
{
//here we test for map coordinates (i,j) validity...
//...
///////
if(map->getTile(i,j)->is(Tile::SOLID))
{
if(player->vel.x<=0 && player->vel.y<=0)
{//we are trying to move left_top;calculate the overlap according to each axis
//and resolve collision where the overlap is minimal
float xoverlap=(i+1)*map->tile_width-player->pos.x;
float yoverlap=(j+1)*map->tile_height-player->pos.y;
if(xoverlap<yoverlap)
{
player->pos.x=(i+1)*map->tile_width;
player->vel.x=0;
}
else
{
player->pos.y=(j+1)*map->tile_height;
player->vel.y=0;
}
}
//here you the same as above
//detect what's the movement direction that led o this
//collision.
//resolve collision by changing the player position to
//be adjacent to the tile in the direction where the
//overlap was minimal!
}
}
}
}

I have problems in detecting the collision when I move diagonally;and sometimes even horizontally!

Am I doing it right?of course not...

I want also to detect the side of the collision of two AABB..

Can Anyone show me how to do it?

1. 1
2. 2
Rutin
18
3. 3
khawk
15
4. 4
A4L
14
5. 5

• 9
• 13
• 26
• 10
• 11
• ### Forum Statistics

• Total Topics
633744
• Total Posts
3013664
×