我们希望在玩游戏时,增加计时功能,可以清晰的看到自己玩了多长时间,增加刺激性。这个功能的核心有两点:
1. 时间计算:当前时刻- 游戏结束的时刻
2. 显示时间到窗口
时间计算
我们在初始化窗口时,就保存一个起始时间;当飞机死亡时,保存一个结束时间。我们在MyGameFrame中定义两个成员变量,如示例13-25所示。
定义时间变量
Date startTime = new Date(); //游戏起始时刻
Date endTime; //游戏结束时刻
我们在飞机死亡时,给endTime赋值,修改paint方法中代码,如示例13-26所示。
计算游戏时间:
//paint方法作用是:画出整个窗口及内部内容。被系统自动调用。
@Override
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; //飞机死掉,画面不显示
endTime = new Date();
if(bao==null){
bao = new Explode(plane.x,plane.y);
}
bao.draw(g);
}
}
if(!plane.live){
if(endTime==null){
endTime = new Date();
}
int period = (int)((endTime.getTime()-startTime.getTime())/1000);
printInfo(g, "时间:"+period+"秒", 50, 120, 260, Color.white);
}
}
/**
* 在窗口上打印信息
* @param g
* @param str
* @param size
*/
public void printInfo(Graphics g,String str,int size,int x,int y,Color color){
Color c = g.getColor();
g.setColor(color);
Font f = new Font("宋体",Font.BOLD,size);
g.setFont(f);
g.drawString(str,x,y);
g.setColor(c);
}
运行效果: