Basic collision direction detection on 2d objects

Posted by Osso Buko on Game Development See other posts from Game Development or by Osso Buko
Published on 2014-05-27T19:14:44Z Indexed on 2014/05/27 22:18 UTC
Read the original article Hit count: 227

I am trying to develop a platform game for Android by using ANdroid GL Engine (ANGLE). And I am having trouble with collision detection. I have two objects which is shaped as rectangular. And no change in rotation. Here is a scheme of attributes of objects.

a busy cat

What i am trying to do is when objects collide they block each other's movement on that direction. Every object has 4 boolean (bTop, bBottom, bRight, bLeft). For example when bBottom is true object can't advance on that direction.

a busy at

I came up with a solution but it seems it only works on one dimensional. Bottom and top or right and left.

public void collisionPlatform (MyObject a, MyObject b) {

    // first obj is player and second is a wall or a platform


    Vector p1 = a.mPosition;  // p1 = middle point of first object
    Vector d1 = a.mPosition2;  // width(mX) and height of first object
    Vector mSpeed1 = a.mSpeed; // speed vector of first object



    Vector p2 = b.mPosition;  // p1 = middle point of second object
    Vector d2 = b.mPosition2;  // width(mX) and height of second object
    Vector mSpeed2 = b.mSpeed;  // speed vector of second object



    float xDist, yDist; // distant between middle of two object
    float width , height; // this is average of two objects measurements  width=(width1+width2)/2

    xDist=(p1.mX - p2.mX); // calculate distance // if positive first object is at the right
    yDist=(p1.mY - p2.mY);   // if positive first object is below

    width = d1.mX + d2.mX; // average measurements calculate
    height = d1.mY + d2.mY;
    width/=2; 
    height/=2;



    if (Math.abs(xDist) < width && Math.abs(yDist) < height) { // Two object is collided
        if(p1.mY>p2.mY) { // first object is below second one
            a.bTop = true;
            if(a.mSpeed.mY<0)  a.mSpeed.mY=0;
            b.bBottom = true;
            if(b.mSpeed.mY>0)  b.mSpeed.mY=0;
        } else {
            a.bBottom = true;
            if(a.mSpeed.mY>0)  a.mSpeed.mY=0;
            b.bTop = true;
            if(b.mSpeed.mY<0)  b.mSpeed.mY=0;
        }


    }

As seen in my code it simply will not work. when object comes from right or left it doesn't work. I tried couple of ways other than this one but none worked. I am guessing right method will include mSpeed vector. But I have no idea how to do it. I really appreciate if you could help. Sorry for my bad english.

© Game Development or respective owner

Related posts about android

Related posts about collision-detection