Collision detection
总的来说,思想很重要,不只是浅层次的,而是全面细致的。
进入正题:
一:首相想到谁跟谁碰撞: 1.man与enemy. 2.bullets与enemy. 当然man只有一个,bullets与enemy都是好多个,
二:以什么形式碰撞:因为定义各个物体都是一个矩形的形状,所以是矩形块和矩形块之间的碰撞,那么问题来了,矩形块的属性是不是要获取? 获取属性的方法又是什么? (attention!!有坑)
三: 获取属性的方法 : 在Enemy类种:
public Rectangle getRect() {
return new Rectangle((int)en_x, (int)en_y,60, 90);
}
这个方法要求是 int 型的,所以要强制转换一下,从而获取enemy的属性,有个坑:不要把width和height不赋值就直接带入,因为直接写上width和height时,没有值就相当于整型默认为0,也就造成了宽和高为0==这个矩形不存在,All efforts were in vain 不会看到想要的结果,因为.man与enemy和bullets都需要碰撞,所以这三个都需要获取得到矩形的属性
四: 实现方法:敌人用动态数组创建
for(int j = 0;j < ae.size();j++) { //画出所有敌人
ae.get(j).draw(g);
}
/*
* man与敌人之间的碰撞 遍历敌人
*/
for(int j = 0;j < ae.size();j++) {
if(ae.get(j).getRect().intersects(iM.getRect())) {
}
}
然后在游戏界面判断一下。需要用到intersects() 方法 就是判断 敌人的矩形块与man的矩形块相交的话 ae.get(j).getRect().intersects(iM.getRect()) 怎么样,子弹与敌人的碰撞类似,但由于子弹和敌人都不是一个,所以要用嵌套。