gpt4 book ai didi

Java - 当给予不同的任务时,对象相互跟随

转载 作者:行者123 更新时间:2023-12-01 23:17:36 25 4
gpt4 key购买 nike

我一直在开发这个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();
}
}

我就是想不通。我知道答案很简单。

最佳答案

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

两个球相互跟随,因为您始终向两个球添加相同的速度:

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

关于Java - 当给予不同的任务时,对象相互跟随,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20983563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com