坦克与子弹的碰撞处理
1.判断碰撞的方法
MyUtil类中:
/**
* 点是否在矩形内部
*
* @param rectX 矩形中心的x坐标
* @param rectY 矩形中心的y
* @param radius 矩形一条边的一半
* @param pointX 子弹的x坐标
* @param pointY y
* @return 是否碰撞
*/
public static final boolean isCollide(int rectX, int rectY, int radius, int pointX, int pointY) {
int disX = Math.abs(rectX - pointX);
int disY = Math.abs(rectY - pointY);
if (disX <= radius && disY <= radius){
return true;
}
return false;
}
2.坦克与子弹碰撞之后产生的效果
Tank类中:
//坦克和子弹碰撞的方法
public void collideBullets(List<Bullet> bullets)
{
for (Bullet bullet:bullets)
{
if(MyUtil.isCollide(x,y,RADIUS,bullet.getX(),bullet.getY()))
{
//子弹消失
bullet.setVisible(false);
//坦克受到伤害
//添加爆炸效果
}
}
}
3.碰撞的情况的分析
GameFrame类中:
private void bulletCollideTank(){
// 我的坦克子弹和敌人的坦克碰撞
for(Tank enemy :enemies){
enemy.collideBullets(myTank.getBullets());
}
//敌人的坦克子弹和我的坦克碰撞
for(Tank enemy :enemies) {
myTank.collideBullets(enemy.getBullets());
}
}
4.调用方法
GameFrame类中:
private void drawRun(Graphics g) {
g.setFont(GAME_FONT);
//绘制黑色的背景
g.setColor(Color.black);
g.fillRect(0, 0, FRAME_WIDTH, FRAME_HEIGHT);
drawEnemies(g);
myTank.draw(g);
bulletCollideTank();
}