1.坦克的绘制使用图片。
在Tank类定义图片数组,加载每一张图片。
使用static关键字声明的代码块叫静态代码块。
静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。
如果有些代码必须在项目启动的时候就执行,那么我们就可以使用静态代码块来实现,这种代码是主动执行的。
//坦克的图片数组
private static Image[] tankImg;
private static Image[] enemyImg;
//静态代码块中对它进行初始化
static {
tankImg = new Image[4];
tankImg[0]=Toolkit.getDefaultToolkit().createImage("res/u.png");
tankImg[1]=Toolkit.getDefaultToolkit().createImage("res/d.png");
tankImg[2]=Toolkit.getDefaultToolkit().createImage("res/l.png");
tankImg[3]=Toolkit.getDefaultToolkit().createImage("res/r.png");
enemyImg = new Image[4];
enemyImg[0]=Toolkit.getDefaultToolkit().createImage("res/u1.png");
enemyImg[1]=Toolkit.getDefaultToolkit().createImage("res/d1.png");
enemyImg[2]=Toolkit.getDefaultToolkit().createImage("res/l1.png");
enemyImg[3]=Toolkit.getDefaultToolkit().createImage("res/r1.png");
}
修改draw方法。
public void draw(Graphics g)
{
logic();
drawImgTank(g);
//drawTank(g);
drawBullet(g);
}
/**
* 使用图片的方法绘制坦克
* @param g
*/
private void drawImgTank(Graphics g)
{
g.drawImage(tankImg[dir],x-RADIUS,y-RADIUS,null );
}
2.解决屏幕闪烁的问题——双缓冲
a.在GameFrame类中定义一个与屏幕大小一样的图片
//定义一个与屏幕大小一样的图片
private BufferedImage bufImg = new BufferedImage(FRAME_WIDTH,FRAME_HEIGHT,BufferedImage.TYPE_4BYTE_ABGR);
b.得到图片画笔,使用图片画笔将所有的内容加载到图片上。将系统画笔绘制图片。
public void update(Graphics g1)
{
//得到图片画笔
Graphics g=bufImg.getGraphics();
g.setFont(GAME_FONT);
//使用图片画笔将所有的内容会加载到图片上。
switch (gameState)
{
case STATE_MENU:
drawMenu(g);
break;
case STATE_ABOUT:
drawAbout(g);
break;
case STATE_HELP:
drawHelp(g);
break;
case STATE_RUN:
drawRun(g);
break;
case STATE_OVER:
drawOver(g);
break;
}
g1.drawImage(bufImg,0,0,null);
}