两个球弹跳java代码

时间:2014-07-16 02:51:54

标签: java swing java-2d

大家好,我试试两个创建一个有两个球的程序。一个是正​​确的,一个正在下降。我有一个代码,但我不知道如何让另一个球落下......任何帮助都非常感谢...

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class move extends JPanel
{
   Timer timer;
   int x = 0, y = 10, width = 40, height = 40;
   int radius = (width / 2);
   int frXPos = 500;
   int speedX = 1;
   move()
   {
        ActionListener taskPerformer = new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                if (x == 0)
            {
                speedX = 1;
            }
            if (x > (frXPos - width)) 
            {
                x=0;
            }
        x = x + speedX;
        repaint();
        }
    };
timer = new Timer(2, taskPerformer);
timer.start();
}
@Override
public void paintComponent(Graphics g)
{
     super.paintComponent(g);
     g.setColor(Color.red);
     g.fillOval(x, y, width, height);
}
}
class MovingBall
{
MovingBall()
{
     JFrame fr = new JFrame("Two Balls Moving Other Ways");
     move o = new move();
     fr.add(o);
     fr.setVisible(true);
     fr.setSize(500, 500); 
     fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[])
{
        MovingBall movingBall = new MovingBall();
}
}

1 个答案:

答案 0 :(得分:2)

不要试图让每个球都成为一个组件,而是使用一个绘图表面,以及一个持有/绘制/操纵每个球的状态的Ball类。然后有一个Ball对象列表。如this example中所示。

该示例使用了许多“相同”类型的Ball,它们都移动相同。但你可以做的是拥有一个抽象方法Ball的超级抽象类move(),并有两个独立的子类UpDownBallRightLeftBall并覆盖move()每个类的方法。

您还将在示例中注意List<Ball>方法中paintComponent的迭代方式。这就是你应该做的。

例如(扩展链接示例)

public interface Ball {
    void drawBall(Graphics g);
    void move();
}

public abstract class AbstractBall implements Ball {
    protected int x, y, width, height;
    ...
    @Override
    public void drawBall(Graphics g) {
        g.fillOval(x, y, width, height);
    }
    // getters and setters where needed
}

public class UpDownBall extends AbstractBall {
    ...
    @Override
    public void move() {
        // change y position
    }
}

public class RightLeftBall extends AbstractBall {
    ...
    public void move() {
        // change x position
    }
}