坦克大战—day 8

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);
     }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值