所以我想创建这个关于飞机射击外星人和东西的java游戏。每次点击鼠标时,飞机都会发射子弹。这意味着飞机一次可以发射10或20发或更多的子弹。为了演示子弹运动,我尝试了线程和计时器,但真正的问题是如果我1子弹击出意味着我创建了一个新的线程(或计时器),并使游戏运行非常缓慢。有什么办法可以解决这个问题吗? 这里我的代码为子弹移动Java图形故障时,拍摄多个子弹
public class Bullet extends JComponent implements Runnable {
int x;//coordinates
int y;
BufferedImage img = null;
Thread thr;
public Bullet(int a, int b) {
x = a;
y = b;
thr = new Thread(this);
thr.start();
}
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
try {
img = ImageIO.read(new File("bullet.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// g.drawImage(resizeImage(img, 2), x, y, this);
g.drawImage(Plane.scale(img, 2, img.getWidth(), img.getHeight(), 0.125, 0.125), x, y, this);
width = img.getWidth()/8;
height = img.getHeight()/8;
super.paintComponent(g);
}
public void run() {
while(true)
{
if(y<-50)break;//if the bullet isnt out of the frame yet
y-=5;//move up
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
创建一个包含项目符号的x,y位置的Bullet类。为每个子弹创建一个Bullet实例。将Bullet的实例保存在列表中。创建** one **线程来更新项目符号的位置,并通过迭代Bullet对象列表来在屏幕上绘制项目符号。从paintComponent方法中读取子弹图像的读数。首先调用super.paintComponent。聘请导师教你适当的Java Swing编码。 –