上回说哪了?碰撞检测。碰撞检测应该是所有事件的触发点。比如:人物下落的时候,落到地面上。程序实现就要不断地检测人物坐标和地面坐标,如果碰撞,则停止下落。还有其他情况:子弹碰到敌人,则敌人消失,并且显示一个子弹爆炸的画面;人物碰到金币,则累计金钱数量,显示一个小动画。
程序怎样实现:所有图形元素,都应该有一个外包图形,如点,圆,三角形,矩形。为了简单起见,这次,我都用了矩形。判断的时候,是用几个宏实现的:
//点与矩形碰撞
#define POINT_IN_RECT(x,y,x1,y1,w,h) ((y)>(y1) && (y)<(y1)+(h) /
&& (x)>(x1) && (x)<(x1)+(w))
//点在一个区间内
#define IN_AREA(x,x1,w) ( (x)>(x1) && (x)<(x1)+(w) )
//两个线段重叠
#define LINE_ON_LINE(x1,y1,w1,x2,y2,w2) ((y1)==(y2) /
&& (x1)<(x2)+(w2) && (x1)>(x2)-(w1) )
//竖线与矩形碰撞
#define VLINE_IN_RECT(x,y,h,x1,y1,w1,h1) ( (y)+(h)>(y1) && (y)<(y1)+(h1) /
&& (x)>(x1) && (x)<(x1)+(w1) )
//横线与矩形碰撞
#define HLINE_IN_RECT(x,y,w,x1,y1,w1,h1) ( (y)>(y1) && (y)<(y1)+(h1) /
&& (x)+(w)>(x1) && (x)<(x1)+(w1) )
//横线与矩形碰撞
#define HLINE_ON_RECT(x,y,w,x1,y1,w1,h1) ( (y)>=(y1) && (y)<=(y1)+(h1) /
&& (x)+(w)>=(x1) && (x)<=(x1)+(w1) )
//矩形与矩形碰撞
#define RECT_HIT_RECT(x,y,w,h,x1,y1,w1,h1) ( (y)+(h)>(y1) && (y)<(y1)+(h1) /
&& (x)+(w)>(x1) && (x)<(x1)+(w1) )
今天就讲到这,其他内容以后慢慢讲。