重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
awt里有一个类 Rectangle, 它有一个方法public boolean intersects(Rectangle r) 可检测物体碰撞.确定此 Rectangle 是否与指定 Rectangle 相交。如果两个矩形的交集为非空,则它们是相交的。
在仁和等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都做网站、外贸营销网站建设 网站设计制作定制网站建设,公司网站建设,企业网站建设,品牌网站建设,成都全网营销推广,外贸网站建设,仁和网站建设费用合理。
也就是说小车代表的矩形和护栏代表的矩形相交
这个是碰撞检测算法。
简单说,你绘制的对象,比如飞机A,子弹B,都是图形,有大小、有形状的,这个形状的边角都有坐标点。
//B的矩形右侧坐标
B.RightX;
//A的矩形左侧坐标
A.LeftX;
假定它们图形都是矩形,子弹B从左侧向右侧平移,与飞机A“碰撞”,碰撞的条件,可以认为是子弹B的最右侧坐标大于等于飞机A的所在的左侧坐标。
if(B.RightX = A.LeftX)
游戏循环中不断进行这样的检测,一旦检测到碰撞成立时就认为是击中了。
进一步,并不是每个图形都是规则的矩形或者圆形,这个时候,你就要为图形自己定义一个碰撞检测图形(比如一个合适大小的圆形,大小刚好可以包裹你的对象)这个形状的坐标与对象运动关联,同步改变。通过这个碰撞检测的图形的坐标是否重合来判断是否碰撞。
下面那个方法是想返回什么?如果是当前Tank与其他任意Tank有碰撞就返回
,可以写成
public boolean collidesWithTanks (ListTank tanks) {
tanks.remove(this);//这里删除当前对象,下面就不用老判断了
for (int i = 0; i tanks.size(); i++) {
Tank tank =tanks.get(i);
//if (this != tank ) {
if(this.collidesWithTank(tank))
return true; //如果和任意一个有碰撞就返回true
}
return false;
}