我有一个代码,当在参数中输入时,它会向我的鼠标光标重复引力。单击鼠标时,会创建一个推动对象的反向效果(矩形远离它)。我试图将其设置为当您单击并按住时,当对象在x或y坐标中按某个数字时,它将随机更改该对象的x和y。这是我的代码。评论区域是我尝试使x和y在达到500个参数时随机变化的地方。
import java.awt.*;
import java.util.Random;
public class Ball
{
private Color col;
private double x, y; // location
private double vx, vy; // velocity
public Ball(int new_x, int new_y, int new_vx, int new_vy)
{
x = new_x;
y = new_y;
vx = new_vx;
vy = new_vy;
}
public Ball()
{
Random gen = new Random();
x = gen.nextInt(480);
y = gen.nextInt(480);
vx = gen.nextInt(10);
vy = gen.nextInt(10);
col = new Color(gen.nextInt(255),gen.nextInt(255),gen.nextInt(255));
}
void paint( Graphics h)
{
h.setColor(col);
h.fillRect((int)x,(int)y,20,20);
}
void move(int currentX, int currentY, boolean isButtonPressed )
{
double dvx, dvy, rx, ry;
double r_mag;
x = x + vx;
y = y + vy;
//bounce
if (x > 480 || x < 0)
vx = -vx;
if (y > 480 || y < 0)
vy = -vy;
if ( currentX <500 && currentY <500) // mouse is on canvas, apply "gravity"
{
rx = currentX - x;
ry = currentY - y;
r_mag = Math.sqrt((rx*rx) + (ry*ry));
// if ( x = 500 || y = 500)
// Random x = new Random();
// x.nextDouble();
// Random y = new Random();
// y.nextDouble();
if (r_mag < 1)
r_mag = 1;
dvx = (rx / r_mag);
dvy = (ry / r_mag);
if (isButtonPressed)
{
vx = vx - dvx; // + makes balls move to cursor.
vy = vy - dvy; // - makes balls move away from cursor.
}
else
{
vx = vx + dvx; // + makes balls move to cursor.
vy = vy + dvy; // - makes balls move away from cursor.
}
}
// reduce speed slowly
vx = .99*vx;
vy = .99*vy;
}
}
答案 0 :(得分:2)
评论区域是我尝试使x和y在达到500个参数时随机变化的地方。
所以当x
或y
达到500时,您想要随机重定位对象吗?
而不是
// if ( x = 500 || y = 500)
这是作业,而不是比较
// Random x = new Random();
重新声明x
,而不是你想要的
// x.nextDouble();
声明无效
// Random y = new Random();
// y.nextDouble();
见上文
你可以使用Math.random()
,如
if (x == 500 || y == 500) {
x = Math.random()*480;
y = Math.random()*480;
}
(注意:Math.random()
在半开区间double
内返回[0,1)
,因此您必须缩放它;我使用的缩放系数480
是猜测)或(不太好,IMO)每次输入Random
时都会创建一个新的if
实例。
但是,
x
,y
,速度vx
和vy
为doubles
,因此动作不太可能x
y
1}}或500
变为>=
,因此您应该在条件中测试==
而不是{{1}}。
在代码中,当任一坐标经过480时,你都会翻转速度,因此难以达到500或更远,只能通过使用鼠标进行明智的加速来实现,因此可能需要更小的阈值。