Java - 当给定不同的任务时,对象彼此跟随

时间:2014-01-07 22:45:19

标签: java object

我一直在研究这个java应用程序。 到目前为止它没有任何意义,只是一个随机彩色的球弹跳。 但现在,当我想在弹跳应用程序中添加另一个球时,球相互跟随。 到目前为止,这是我的代码。

import java.awt.*;
import javax.swing.*;

public class MainFrame extends JPanel implements Runnable {

    Color color = Color.red;
    int dia = 60;

物体的直径。

    long delay = 20;

延迟时间。

    private int x = (int)Math.floor(Math.random() * 580);
    private int y = (int)Math.floor(Math.random() * 900);
    private int xx = (int)Math.floor(Math.random() * 580);
    private int yy = (int)Math.floor(Math.random() * 900);

以上是物体位置。

    private int dx = (int)Math.floor(Math.random() * 7);
    private int dy = (int)Math.floor(Math.random() * 7);
    private int dxx = (int)Math.floor(Math.random() * 7);
    private int dyy = (int)Math.floor(Math.random() * 7);

以上是物体速度。

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
    g.setColor(color); 
    g.fillOval(x,y,60,60);

    g.setColor(color); 
    g.fillOval(xx,yy,60,60);
}

图形。 以下只是计算,thread.sleep和JFrame。

public void run() {
    while(isVisible()) {
        try {
            Thread.sleep(delay);
        } catch(InterruptedException e) {
            System.out.println("interrupted");
        }
        move();
        repaint();
    }
}

public void move() {
    if(x + dx < 0 || x + dia + dx > getWidth()) {
        dx *= -1;
        color = getColor();
    }
    if(y + dy < 0 || y + dia + dy > getHeight()) {
        dy *= -1;
        color = getColor();
    }
    if(xx + dxx < 0 || xx + dia + dxx > getWidth()) {
        dxx *= -1;
        color = getColor();
    }
    if(yy + dyy < 0 || yy + dia + dyy > getHeight()) {
        dyy *= -1;
        color = getColor();
    }
    x += dx;
    y += dy;
    xx += dx;
    yy += dy;
}

private Color getColor() {
    int rval = (int)Math.floor(Math.random() * 256);
    int gval = (int)Math.floor(Math.random() * 256);
    int bval = (int)Math.floor(Math.random() * 256);
    return new Color(rval, gval, bval);
}

private void start() {
    while(!isVisible()) {
        try {
            Thread.sleep(25);
        } catch(InterruptedException e) {
            System.exit(1);
        }
    }
    Thread thread = new Thread(this);
    thread.setPriority(Thread.NORM_PRIORITY);
    thread.start();
}

public static void main(String[] args) {
    MainFrame test = new MainFrame();
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(test);
    f.setSize(640, 960);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    f.setLocation(dim.width/2-f.getSize().width/2, dim.height/2-f.getSize().height/2);
    f.setVisible(true);
    test.start();
    }
 }

我无法弄明白。 我知道答案很简单。

1 个答案:

答案 0 :(得分:3)

你应该定义一个类Ball并创建它的两个实例,而不是重复变量,并在该类中有一个x,y坐标和速度dx和dy。

两者互相追随,因为你总是在两个球上添加相同的速度:

x += dx;
y += dy;
xx += dx;
yy += dy;