横版过关游戏开发-碰撞检测

来源:互联网 发布:安卓字体软件 知乎 编辑:程序博客网 时间:2024/04/28 03:53

上回说哪了?碰撞检测。碰撞检测应该是所有事件的触发点。比如:人物下落的时候,落到地面上。程序实现就要不断地检测人物坐标和地面坐标,如果碰撞,则停止下落。还有其他情况:子弹碰到敌人,则敌人消失,并且显示一个子弹爆炸的画面;人物碰到金币,则累计金钱数量,显示一个小动画。

程序怎样实现:所有图形元素,都应该有一个外包图形,如点,圆,三角形,矩形。为了简单起见,这次,我都用了矩形。判断的时候,是用几个宏实现的:

//点与矩形碰撞#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) )
今天就讲到这,其他内容以后慢慢讲。
原创粉丝点击