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