在
java中,如何在每次单击鼠标时将球丢弃到面板?假设我点击面板3次,所以面板上应该有3个球弹跳.
我有这个代码块:
ball = new Thread() {
public void run() {
while (true) {
x += speedX;
y += speedY;
}
}
};
ball.start();
repaint();
try {Thread.sleep(100/3);}catch(InterruptedException ex){}
以及绘球的方法:
public void paintComponent(Graphics ball) {
super.paintComponent(ball);
if(clicks>0){
ball.setColor(Color.BLUE);
ball.fillOval((int) (x - rad), (int) (y - rad), (int)(2 * rad), (int)(2 * rad));
}
}
但是这个线程只丢掉了1个球.我也尝试了一系列线程,但它没有用.
最佳答案 >显然,您需要为每个球保留不同的(x,y)数据,例如:有一个带有x,y的Ball类,然后是List< Ball>
(除非你打算让它们计算出来,即有一个x,y,球的计算方向与它有一些偏差)
>在paintComponent上你需要绘制所有球,这意味着’fillOval’的一些循环
>在更改x和y后,您的线程需要调用’repaint’.
它还需要一些“睡眠”,否则球会跑得太快.
>关于线程,我有点同意MadProgrammer:你可以有一个单一的线程迭代所有的球并推进他们的coordiantes.但是你需要几个线程(用于练习,或者为了更好的未来控制)它应该可以正常工作,只要每个线程都知道它负责哪个球.所以它就像是
List<Ball> balls= ...;
Class BallRunnable implements Runnable{
private Ball ball;
private JComponent comp; // the one whose paintComponent does fillOval
public BallRunnable(Ball ball, JComponent comp){
this.ball=ball;
}
public void run(){
while(true){
ball.x +=speedX; ball.y+= speedY;
Thread.sleep(200);
comp.repaint();
}
}
}