class HitBallPanel extends JPanel{
private int ballX = 100;
private int ballY = 100;
private int rectX = 0;
private int rectY = 350;

public HitBallPanel(){
Timer timer = new Timer(100,new ActionListener(){
public void actionPerformed(ActionEvent e){
ballY+=10;

addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_LEFT : rectX-=1;break;
case KeyEvent.VK_RIGHT : rectX+=1;break;
}
repaint();
}
});

if(ballY == rectY){
ballX = (int)(Math.random()*300);
ballY = (int)(Math.random()*300);
}
repaint();
}
});
timer.start();
}

protected void paintComponent(Graphics g){
super.paintComponent(g);

g.fillOval(ballX,ballY,10,10);
g.fillRect(rectX,rectY,80,10);
}

解决方案 »

  1.   

    你这个条件有问题!!if(ballY == rectY)
    弹起后ballY 的值十有八九不是10的倍数了,所以这个条件就不可能满足了
    需改成   if(ballY >= rectY)
      

  2.   

    你这样,球还没落出去就无限了。 bally肯定是>=recty的 
    应该写成if(ballY-rectY < 10) 10是精确度, 可以改。
      

  3.   

    两种改方:
    1.if(ballY >= rectY){
    ballX = (int)(Math.random()*300);
    ballY = (int)(Math.random()*300);
    }
    2.if(ballY == rectY){
    ballX = (int)(Math.random()*300);
    ballY = ((int)(Math.random() * 300) / 10) * 10;
    }
      

  4.   

    我是这样改的:
    if((ballX - rectX) <= 80 && ballY >= rectY)
    {
      ballX = (int)(Math.random()*300);
      ballY = (int)(Math.random()*300);
       }
    这样就判断只有小球落到了的范围之内,并且ballY>=rectY才能弹起来...
    这样又有新的问题了,开始的时候每次移动木板走的很慢,随着移动米板的次数增多,后面每次移动木板rectX就变化很快了我想不明白这是为什么一个这么简单的题弄这么久诶。。