• Create Account

Banner advertising on our site currently available from just \$5!

Member Since 20 Apr 2013
Offline Last Active May 19 2013 08:08 AM

### AABB vs TileMap collision response

17 May 2013 - 07:43 AM

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?

### AABB vs TileMap collision response

16 May 2013 - 06:26 AM

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?

### Best way to do collision detection for a 2D Platformer

20 April 2013 - 11:00 AM

Hi everybody..
I have a question:What's the best method to perform collision detection & response in a 2D platformer?
There's AABB,Polygon intersection,ray casting (used in sonic),the collision points(that surround the player),..
when I say best I mean the approach that gives you the most possibilities..I know this is very game dependant,let's say that I want to make a braid-like style of game, where platform physics just feel natural (sonic too) and where the platforming isn't the core gameplay!

PARTNERS