Adol  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統(tǒng)計
          • 隨筆 - 2
          • 文章 - 6
          • 評論 - 5
          • 引用 - 0

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
            1package game6;
            2
            3/*
            4    這里我們按空格后就會出現(xiàn)一個子彈形狀的東西向上移動,用雙緩沖實現(xiàn)的
            5*/

            6
            7import java.awt.*;
            8import java.awt.event.*;
            9import javax.swing.*;
           10
           11class TestCanvas extends Canvas implements Runnable
           12{
           13    private int x,y; //那個圓的坐標
           14    
           15    private final int ovalWidth=50;
           16    
           17    private final int bulletHeight=10//確定子彈大小的
           18    
           19    private int speed=1;  //子彈的速度
           20    
           21    private int beginX,beginY; //子彈頭的坐標
           22    
           23    private int bulletX[]; // 繪制子彈形狀的數(shù)組 橫縱坐標
           24    private int bulletY[];
           25    private boolean isDrawBullet; //是否畫子彈 true表示是,false表示否
           26    
           27    TestCanvas()
           28    {
           29        this.setSize(400400);
           30        x=200;
           31        y=50;
           32        isDrawBullet=false;
           33        bulletX=new int[5];
           34        bulletY=new int[5];
           35        initBeginXY();
           36        setBulletXY();
           37    }

           38    
           39    public void setBulletXY() //設(shè)置子彈5個點的坐標
           40    {
           41        bulletX[0]=beginX;
           42        bulletX[1]=beginX+bulletHeight/2;
           43        bulletX[2]=beginX+bulletHeight/2;
           44        bulletX[3]=beginX-bulletHeight/2;
           45        bulletX[4]=beginX-bulletHeight/2;
           46        bulletY[0]=beginY;
           47        bulletY[1]=beginY+bulletHeight;
           48        bulletY[2]=beginY+2*bulletHeight;
           49        bulletY[3]=beginY+2*bulletHeight;
           50        bulletY[4]=beginY+bulletHeight;
           51    }

           52    
           53    public void initBeginXY() //初始化子彈頭坐標
           54    {
           55        beginX=200;
           56        beginY=200;
           57    }

           58    
           59    public void leftMove() //左移
           60    {
           61        x-=50;
           62        if(x<=-50) x=this.getWidth();
           63        repaint();
           64    }

           65    
           66    public void rightMove() //右移
           67    {
           68        x+=50;
           69        if(x>=this.getWidth()) x=-50;
           70        repaint();
           71    }

           72    
           73    public void upMove() //上移
           74    {
           75        y-=50;
           76        if(y<=-50) y=this.getHeight();
           77        repaint();
           78    }

           79    
           80    public void downMove() //下移
           81    {
           82        y+=50;
           83        if(y>=this.getHeight()) y=-50;
           84        repaint();
           85    }

           86    
           87    public void drawBullet(Graphics g) //畫出子彈
           88    {
           89        g.fillPolygon(bulletX, bulletY, 5);
           90    }

           91    
           92    public void doOrNotdoDrawBullet(boolean tag) //是否畫出子彈
           93    {
           94        isDrawBullet=tag;
           95        repaint();
           96    }

           97    
           98    public boolean getIsDrawBullet()
           99    {
          100        return isDrawBullet;
          101    }

          102    
          103    public void paint(Graphics g)
          104    {
          105        g.fillOval(x, y, ovalWidth, ovalWidth);
          106    }

          107    
          108    public void update(Graphics g) //實現(xiàn)消除閃爍
          109    {
          110        Image image;      //創(chuàng)建一張和原來大小一樣的圖像
          111        image=this.createImage(this.getWidth(),this.getHeight()); 
          112        Graphics gp=image.getGraphics(); //獲得此創(chuàng)建圖像的 畫筆
          113        paint(gp);  //調(diào)用paint  對此圖像作畫
          114            
          115        if(isDrawBullet)  drawBullet(gp); //可能畫子彈
          116    
          117        g.drawImage(image, 00this);  //將此圖像畫到(this)畫布上
          118    }

          119    
          120    public void run()
          121    {
          122        while(true)
          123        {
          124            if( isDrawBullet&&
          125                 beginX>=0&&beginX<=this.getWidth()&&
          126                  beginY>=0&&beginY<=this.getHeight()&&
          127                  !(beginX>=x&&beginX<=x+ovalWidth&&
          128                  beginY>=y&&beginY<=y+ovalWidth) )
          129            {
          130                beginY-=speed;  //移動
          131                setBulletXY();  //設(shè)置
          132                repaint();  //重繪
          133            }

          134            else
          135                doOrNotdoDrawBullet(false); //子彈消失
          136            try
          137            {
          138                Thread.sleep(10);
          139            }

          140            catch(InterruptedException e)
          141            {
          142                
          143            }

          144        }

          145    }

          146
          147}

          148
          149class MyKeyAdapter extends KeyAdapter
          150{
          151    TestCanvas tc;
          152    Thread th;
          153    MyKeyAdapter(TestCanvas tc)
          154    {
          155        this.tc=tc;
          156        th=new Thread(this.tc);
          157    }

          158    public void keyPressed(KeyEvent e)
          159    {
          160        if(e.getKeyCode()==KeyEvent.VK_LEFT)
          161            tc.leftMove();
          162        else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
          163            tc.rightMove();
          164        else if(e.getKeyCode()==KeyEvent.VK_UP)
          165            tc.upMove();
          166        else if(e.getKeyCode()==KeyEvent.VK_DOWN)
          167            tc.downMove();
          168        if(e.getKeyCode()==KeyEvent.VK_SPACE)
          169        {
          170            if(!tc.getIsDrawBullet())  //判斷子彈是否已畫
          171            {
          172                tc.initBeginXY();            //要畫子彈時初始化
          173                tc.setBulletXY();  //立即設(shè)置
          174            }

          175            tc.doOrNotdoDrawBullet(true);
          176            try
          177            {
          178                th.start();
          179            }

          180            catch(IllegalThreadStateException ee)
          181            {
          182                
          183            }
                      
          184        }

          185    }

          186}

          187
          188public class BulletAppearAndDis extends JFrame
          189{
          190    BulletAppearAndDis()
          191    {
          192        super("學習如何在按空格后出現(xiàn)一個會自動移動的子彈,且是畫的");
          193        setBounds(300150400400);
          194        setVisible(true);
          195        this.addWindowListener(new WindowAdapter()
          196        {
          197            public void windowClosing(WindowEvent e)
          198            {
          199                dispose();
          200                System.exit(0);
          201            }

          202        }
          );
          203    }

          204    public static void main(String[] args)
          205    {
          206        BulletAppearAndDis jf=new BulletAppearAndDis();
          207        TestCanvas tc=new TestCanvas();
          208        tc.addKeyListener(new MyKeyAdapter(tc));
          209        jf.add(tc);
          210        tc.requestFocusInWindow();
          211    }

          212}
          posted on 2009-08-12 23:19 Adol 閱讀(218) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
           
          Copyright © Adol Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 云林县| 麻江县| 靖州| 紫云| 绿春县| 道孚县| 留坝县| 东明县| 龙州县| 长岭县| 甘南县| 龙口市| 双桥区| 延安市| 米易县| 焦作市| 湖南省| 鲁山县| 广水市| 信丰县| 娄烦县| 麦盖提县| 汉阴县| 威远县| 河曲县| 博客| 开封县| 碌曲县| 巫溪县| 杭锦后旗| 夏邑县| 西乌| 远安县| 抚宁县| 吉林市| 吴江市| 惠水县| 得荣县| 沙坪坝区| 长武县| 隆子县|