Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Allegro collision detection

Name: Anonymous 2010-05-11 12:59

bool Player::collide(int x, int y, BITMAP* object)
{
    for (int px = 0; px < 20; px++)
    {
        for (int py = 0; py < 20; px++)
        {
            if (getpixel(image,px+x,py=y)!=bitmap_mask_color(image))
            {
                if (getpixel(object,xPos+px+x,yPos+py+y)!=bitmap_mask_color(object))
                {
                    return true;
                    break;
                }
            }
        }
    }
    return false;
}

xPos and yPos speak for themselves
x and y are the potential changes to the xPos and yPos, if this method returns false, they will be made.
image is a 20x20px player image.
object is my arena made from a tileset, pieced together by a vector of strings, each character in the vector representing a tile.

However, my player resolutely refuses to fall when gravity tells him to, or the program crashes. Either he's colliding with something (He shouldn't be, he's surrounded by masked squares) or some crazy voodoo is eating my datas.

any ideas?

Name: Anonymous 2010-05-11 20:32

>>8
derp

>>1
I think bounding boxes is a much better idea than pixel-based collisions, which aren't necessary when sprites are 20x20.  You should also be testing axes indepedently of each other.  In the original example that you had posted, if the player is pulled into the ground by gravity while walking then there will be no motion in the horizontal direction.

You would also want to make your tile collision function generic for all sprites, not just your player.

Also, I would just use C, because C++ isn't necessary for such a simple program.  Make your map an array of char.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List