public Tank(int[] Enemy,String[] EnemyDir)
{
this.Enemy=Enemy;
this.EnemyDir=EnemyDir;
}
paintComponent(Graphics g).....
我传递了一个组数给这个构造器,而且如果我在构造器内部可以正确的打印数组,为什么在paintComponent方法中打印数组的
时候全是0和NULL?
{
this.Enemy=Enemy;
this.EnemyDir=EnemyDir;
}
paintComponent(Graphics g).....
我传递了一个组数给这个构造器,而且如果我在构造器内部可以正确的打印数组,为什么在paintComponent方法中打印数组的
时候全是0和NULL?
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了
已经建立了对象private String[] EnemyDir=new String[8];
应该用for循环给EnemyDir赋值:
for (int i = 0; i < EnemyDir.length; i++) {
EnemyDir[i] = EnemyDir[i];}
你画图的那个tank估计已经被变动了!
g2.drawImage(imgs.get(EnemyDir[i]),Enemy[i],0,null);
改为这样试试:
g2.drawImage(imgs.get(this.EnemyDir[i]), this.Enemy[i],0,null);