パラメータに入力すると、マウスカーソルに向かって引力を複製するコードがあります。マウスがクリックされると、オブジェクト (四角形を遠ざける) を押し出す逆効果が作成されます。クリック アンド ホールドすると、オブジェクトが x または y 座標で特定の数に達すると、そのオブジェクトの x と y がランダムに変更されるように設定しようとしています。これが私のコードです。コメント領域は、500 個のパラメーターに達したときに x と y をランダムにしようとした場所です。
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;
}
}