} } }

    坦克大战底层框架搭建并思路解析(二)=》让坦克动起来

    添加时间:2013-6-11 点击量:

     好,持续昨天的,昨天我们已经包装好一个坦克类了,如今正式开端驱动坦克,动起来才是王道,文绉绉的一向扯蛋就没意思了,对吧?


    定义一个TankClient.java (坦克的客户端类)




    import java.awt.;
    
    import java.awt.event.; //引入事务



    public class TankClient extends Frame {          //直接持续 Frame类,比在在内容里: Frame f = new Frame();来创建窗体,有很大的便利,且易于调配
    
    public static final int GAME_WIDTH = 800; //定义游戏窗体的宽度
    public static final int GAME_HEIGHT = 600; //第一游戏窗体的宽度
    Tank myTank = new Tank(40,40); //实例化一个坦克,然后坦克呈现的坐标为 x=40,y=40;


    下面我们就来好好的定义一下这个游戏窗体,应用一个办法来定义这个窗体



    public void lauchFrame(){
    
    this.setBounds(100,100,GAME_WIDTH,GAME_HEIGHT); //定义窗体的呈现地位和大小
    this.setTitle(tank苦战!); //给窗体起名

    this.addWindowListener(new WindowAdapter(){ //应用匿名类的体式格式进行,使得窗口可以或许按 “×”后封闭
    public void windowClosing(WindowEvent e) { //实现封闭窗体办法
    System.exit(
    1); //输入1默示正常的退出
    }
    });
    //坦克类中我们定义的的四个标的目标键是要经由过程被到才干够被法度识此外,是以这里还是采取匿名类的体式格式来实现
    this.addKeyListener(new KeyAdapter(){ //适配器
    public void keyPressed(KeyEvent e){
    myTank.keyPressed(e); //如许就了坦克类里的keyPressed()办法了
    }
    public void keyReleased(KeyEvent e){ //同上
    myTank.keyReleased(e);
    }
    });

        this.setResizable(false);     //窗体不成拖沓改变大小
        this.setBackground(Color.GREEN);     //设置游戏窗体的靠山色彩
        setVisible(true);                     //窗体可见
        new Thread(new PaintThread()).start();     //启动运行线程,下面将提到
    }





    //用paint()办法来调用tank类里的draw()画出来坦克来,但此若是单用此办法画出来的只是固定的,无法移动,是以下面应用线程来弥补这缺点
    public
    void paint(Graphics g){
    myTank.draw(g);
    }


    应用线程:



    private class PaintThread implements Runnable{
    
    public void run(){
    whiletrue){
    repaint(); //repaint()办调用()办法【下讲中这办法用于解决闪烁题目】,()再去调用paint()办法,这里没有()的话会直接调用paint()办法
    try{Thread.sleep(20);} //规定线程每 20毫秒画一次,就是每隔20毫秒你才干驱动一次坦克,这也是坦克可否灵活移动的关键,设置过大的话感触感染老牛推车行走慢,不爽!
    catch(Exception e){e.printStackTrace();}
    }
    }
    }


    最后我们应用主办法来调用lauchFrame()办法,从而产生坦克出来



    public static void main(String[] args) {
    
    TankClient tc
    = new TankClient();
    tc.lauchFrame();
    }
    }



    运行之后可看到如下,标的目标把握很是活络,八个标的目标都正常运行,可自行感触感染一下这移动的道理,与坦克类中的标的目标定义是互相干注的!



    至此底层框架的搭建完美收官,本人亲测 Tank类代码和TankClient类代码没有题目,只是复制时删除注释要重视不要删到括号,


    下一步我们将进行三步完成坦克大战的第二步关于坦克发射弹和敌方呈现的景象!

    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: