最近在研究andengine这款android的游戏引擎,遇到了个小问题。1.怎么检测矩形和线段的碰撞??因为源码中 的 collidesWith方法会检测 对象类型,所以只能用于检测线和线,或者矩形和矩形的碰撞
不知道哪位大神知道,怎么检测线和矩形的碰撞?2. 怎么判断两个sprite之间的 body碰撞??
如下图  经过我的测试,我发现目前的碰撞是当图片的边缘发生碰撞的时候就
碰撞了,怎么判断 当 图片中的某一个区域发生碰撞时才认为发生碰撞了呢?
|||||||||||||||
||           ||
||           ||
||           ||
|||||||||||||||

解决方案 »

  1.   

    //国外网罩找到的算法。效率很高!
    //线段与 方框的碰撞判断
    typedef float F32;  typedef struct _Point  
    {  
    F32 x,y,z;  
    } Point;  typedef struct _Box  
    {  
    Point min,max;  
    }Box;int intersect( const Point *start, const Point *end,  const Box *box)//, F32 *time)  
    {  
    F32 st,et,fst = 0,fet = 1;  
    F32 const *bmin = &box->min.x;  
    F32 const *bmax = &box->max.x;  
    F32 const *si = &start->x;  
    F32 const *ei = &end->x;  
    int i = 0;
    F32 di = 0;
    for ( i = 0; i < 2; i++)
    {  
    if (*si < *ei) 
    {  
    if (*si > *bmax || *ei < *bmin)  
    return FALSE;  
    di = *ei - *si;  
    st = (*si < *bmin)? (*bmin - *si) / di: 0;  
    et = (*ei > *bmax)? (*bmax - *si) / di: 1;  
    }  
    else {  
    if (*ei > *bmax || *si < *bmin)  
    return FALSE;  
    di = *ei - *si;  
    st = (*si > *bmax)? (*bmax - *si) / di: 0;  
    et = (*ei < *bmin)? (*bmin - *si) / di: 1;  
    }   if (st > fst) fst = st;  
    if (et < fet) fet = et;   if ( fst>= fet)  
    return FALSE; bmin++; bmax++;  
    si++; ei++; 
     
    }  
    //*time = fst;  
    return TRUE;  
    }