老巢被击毁的处理
//坦克的子弹和地图块的碰撞
public void bulletsCollideMapTile(List<MapTile> tiles) {
//foreach遍历容器中的元素,
//在遍历的过程中只能使用迭代器的删除方式删除元素
for (int i = 0; i < tiles.size(); i++) {
MapTile tile = tiles.get(i);
if (tile.isCollideBullet(bullets)) {
//添加爆炸效果
addExplode(tile.getX() + MapTile.radius, tile.getY() + MapTile.tileW);
//设置地图块销毁
tile.setVisible(false);
//归还对象池
MapTilePool.theReturn(tile);
//当老巢被击毁后一秒后切换游戏状态
if (tile.isHouse()) {
//老巢被击毁后,0.5切换游戏状态
delaySecondsToOver(500);
}
}
}
}
/**
* 延时若干毫秒后切换游戏状态
* @param millisSecond
*/
private void delaySecondsToOver(int millisSecond){
new Thread(){
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
GameFrame.setGameState(Constant.STATE_OVER);
}
}.start();
}
调制子弹发射的间隔
private long fireTime;
/**
*坦克发射子弹方法
*/
//坦克开火
public void fire(){
if (System.currentTimeMillis() - fireTime > Constant.FIRE_INTERVAL) {
int bulletX = x;
int bulletY = y;
switch (dir) {
case DIR_UP:
bulletY -= RADIUS;
break;
case DIR_DOWN:
bulletY += RADIUS;
break;
case DIR_LEFT:
bulletX -= RADIUS;
break;
case DIR_RIGHT:
bulletX += RADIUS;
break;
}
Bullet bullet = BulletPool.get();
bullet.setX(bulletX);
bullet.setY(bulletY);
bullet.setDir(dir);
bullet.setAtk(atk);
bullet.setColor(color);
bullet.setVisible(true);
bullets.add(bullet);
//发射子弹之后,记录本次发射的时间
fireTime = System.currentTimeMillis();
}
}