我们的游戏逻辑是:“飞机碰到炮弹,则死亡”。也就是说,我们需要检测:“飞机和所有的炮弹是否碰撞”。如果有50个炮弹对象,则进行50次比对检测即可。
我们修改MyGameFrame类的paint()方法,如示例13-21所示。
MyGameFrame类:增加碰撞检测
public void paint(Graphics g) {
g.drawImage(bgImg, 0, 0, null);
plane.drawMySelf(g); //画出飞机本身
//画出容器中所有的子弹
for(int i=0;i<shellList.size();i++){
Shell b = shellList.get(i);
b.draw(g);
//飞机和所有炮弹对象进行矩形检测
boolean peng = b.getRect().intersects(plane.getRect());
if(peng){
plane.live = false; //飞机死掉,画面不显示
}
}
}
上面逻辑要求:plane.live=false时,飞机消失。所以,我们也需要修改Plane的代码。
Plane类:根据飞机状态判断飞机是否消失
public void drawMySelf(Graphics g) {
if(live){
super.drawMySelf(g);
//根据方向,计算飞机新的坐标
if(left){
x -= speed;
}
if(right){
x += speed;
}
if(up){
y -= speed;
}
if(down){
y += speed;
}
}
}
这样,运行程序时,发生炮弹和飞机的碰撞,飞机消失,结果如图所示:
发生碰撞后的运行效果图: