public Tank(int[] Enemy,String[] EnemyDir)
   {
this.Enemy=Enemy;
this.EnemyDir=EnemyDir;
       
   }
paintComponent(Graphics g).....
我传递了一个组数给这个构造器,而且如果我在构造器内部可以正确的打印数组,为什么在paintComponent方法中打印数组的
时候全是0和NULL?

解决方案 »

  1.   

    import   java.awt.*;   
      import   java.awt.geom.*;   
      import   java.awt.geom.Point2D.Double;   
      import   java.util.*;   
      import   java.awt.event.*;   
      import   javax.swing.*;  
      import   javax.swing.event.*; public class TankBattle
    {
        public static void main(String[] args)
        {
    EventQueue.invokeLater(new Runnable()
             {
    public void run()
    {
        GameFrame frame=new GameFrame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
        });
        }
    }
    class GameFrame extends JFrame
    {
        public GameFrame()
        {
    setTitle("TankBattle");
    setSize(DW,DH);
    //坦克组
           for(int i=0;i<8;i++)
           {
       Enemy[i]=i*100;
       EnemyDir[i]="D";
           }
    Tank ETank=new Tank(Enemy,EnemyDir);
    Tank tank=new Tank(DW/2,DH-100,Enemy.length,"U");
    tank.setFocusable(true);
    add(tank);
    setResizable(false);
        }
        private  static int DW=800;
        private  static int DH=600;
        private int[] Enemy=new int[8];
        private String[] EnemyDir=new String[8];
    }
    class Tank extends JComponent
    {
        private static Toolkit tk = Toolkit.getDefaultToolkit();
        private static Image[] tankImages = null;
        private static Image[] missileImages = null;
        private static Map<String, Image> imgs = new HashMap<String, Image>();
        private static Map<String, Image> imgs1 = new HashMap<String, Image>();
        static {
            tankImages = new Image[]
                    {
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankL.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankRU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankRD.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/tankLD.gif"))
    };

                    imgs.put("L", tankImages[0]);
         imgs.put("LU", tankImages[1]);
         imgs.put("U", tankImages[2]);
                imgs.put("RU", tankImages[3]);
         imgs.put("R", tankImages[4]);
         imgs.put("RD", tankImages[5]);
         imgs.put("D", tankImages[6]);
         imgs.put("LD", tankImages[7]);
         }
    static {
    missileImages = new Image[] {
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileL.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileLU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileRU.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileR.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileRD.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileD.gif")),
    tk.getImage(Tank.class.getClassLoader().getResource("images/missileLD.gif"))
    };

    imgs1.put("L", missileImages[0]);
    imgs1.put("LU", missileImages[1]);
    imgs1.put("U", missileImages[2]);
    imgs1.put("RU", missileImages[3]);
    imgs1.put("R", missileImages[4]);
    imgs1.put("RD", missileImages[5]);
    imgs1.put("D", missileImages[6]);
    imgs1.put("LD", missileImages[7]);

    }
       public Tank(int x,int y,int length,String dir)
       {
    this.x=x;
    this.y=y;
    this.length=length;
    addKeyListener(new keyHandler());
    this.dir=dir;         

       }
       public Tank(int x,int y,String dirCannon)
       {
    this.dirCannon=dirCannon;
       }
       public Tank(int[] Enemy,String[] EnemyDir)
       {
    this.Enemy=Enemy;
    this.EnemyDir=EnemyDir;
           
       }
      
       
       public void paintComponent(Graphics g)
       {
           Graphics2D g2=(Graphics2D)g;
           g2.drawImage(imgs.get(dir),x,y,null);
     for(i=0;i<8;i++)
             {
        g2.drawImage(imgs.get(EnemyDir[i]),Enemy[i],0,null);
     }
    if(fire)
            {
        g2.drawImage(imgs1.get(dirCannon),CannonX,CannonY,null);
    }
    Runnable r=new paintRunnable();
            Thread t=new Thread(r);
            t.start();
       }
       private class keyHandler implements KeyListener
       {
    public void keyPressed(KeyEvent event)
    {
        int keyCode=event.getKeyCode();
             if(keyCode==KeyEvent.VK_W)
        {
    dir="U";
            y-=5;
        Tank tank=new Tank(x,y,length,dir);
        }
        if(keyCode==KeyEvent.VK_S)
        {
    dir="D";
            y+=5;
        Tank tank=new Tank(x,y,length,dir);
        }
        if(keyCode==KeyEvent.VK_A)
        {
    dir="L";
            x-=5;
        Tank tank=new Tank(x,y,length,dir);
        }
        if(keyCode==KeyEvent.VK_D)
        {
    dir="R";
            x+=5;
        Tank tank=new Tank(x,y,length,dir);
        }
        if(keyCode==KeyEvent.VK_H)
        {
    fire=true;
    if(Ready)
    {
        CannonX=x;
        CannonY=y;
    }
    if(CannonX>0&&CannonY>0)
     dirCannon=dir;
    Ready=false;

        }
    }

      
    public void keyReleased(KeyEvent event)
    {
    }
    public void keyTyped(KeyEvent event)
    {
    }
        }   private class paintRunnable implements Runnable
       {
           public void run()
           {
        try
        {
        if(!Ready)
        {
        if(dirCannon=="U")
        {

               CannonY-=10;
         Tank cannon=new Tank(CannonX,CannonY,"U");
        }
        if(dirCannon=="D")
        {

               CannonY+=10;
         Tank cannon=new Tank(CannonX,CannonY,"D");
        }
        if(dirCannon=="R")
        {

               CannonX+=10;
         Tank cannon=new Tank(CannonX,CannonY,"R");
        }
        if (dirCannon=="L")
        {
               CannonX-=10;
         Tank cannon=new Tank(CannonX,CannonY,"L");
        }
        
        }
    if(CannonY<0||CannonX<0||CannonY>600||CannonX>800)
    {
        Ready=true;
    }
                   repaint();
           Thread.sleep(5);
        }
        catch(InterruptedException e)
        {
        }
           }
        }
        private boolean Ready=true;
        private boolean fire;  
        private static int x;
        private static int y;
        private static int i;
        private static int CannonX;
        private static int CannonY;
        private String dir;
        private String dirCannon;
        private static int length;
        private int[] Enemy=new int[8];
        private String[] EnemyDir=new String[8];
        private int[] Enemy1=new int[8];
        private String[] EnemyDir1=new String[8];
    }自已写的,GIF是从马士兵的程序中弄出来的,新手写得很生涩,而且只写了一部份,主要是我想把这个数组传过去画出敌方的坦克组,但是数组一到PAINTCOMPONENT方法中就全变成0和NULL了
      

  2.   

    哈哈,我在做那个BBS,等你的结果啦
      

  3.   

    传值的方法有问题!!!
    已经建立了对象private String[] EnemyDir=new String[8]; 
    应该用for循环给EnemyDir赋值:
    for (int i = 0; i < EnemyDir.length; i++) {
        EnemyDir[i] = EnemyDir[i];}
      

  4.   

    如果你确认那个Tank就是你的那个Tank,那么我只能说,其实他不是。
    你画图的那个tank估计已经被变动了!
      

  5.   

    将 paintComponent 方法中的
    g2.drawImage(imgs.get(EnemyDir[i]),Enemy[i],0,null); 
    改为这样试试:
    g2.drawImage(imgs.get(this.EnemyDir[i]), this.Enemy[i],0,null);