周文佳语强化班

Collision detection

2018-12-09  本文已影响9人  Infinite_q

总的来说,思想很重要,不只是浅层次的,而是全面细致的。

进入正题:

      一:首相想到谁跟谁碰撞: 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())  怎么样,子弹与敌人的碰撞类似,但由于子弹和敌人都不是一个,所以要用嵌套。

上一篇下一篇

猜你喜欢

热点阅读