0

パラメータに入力すると、マウスカーソルに向かって引力を複製するコードがあります。マウスがクリックされると、オブジェクト (四角形を遠ざける) を押し出す逆効果が作成されます。クリック アンド ホールドすると、オブジェクトが 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;
}

}
4

1 に答える 1

2

コメント領域は、500 個のパラメータに達したときに x と y をランダムにしようとした場所です。

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()a を返すので、それをスケーリングする必要があります。私が使用したスケーリング係数は推測です)、または(あまり良くない、IMO)を入力するたびに新しいインスタンスを作成します.double[0,1)480Randomif

しかし、

  1. xy、および速度vxおよびvydoublesであるため、動きが正確に になる可能x性は非常に低いため、条件ではなく をテストする必要があります。y500>===

  2. コードでは、いずれかの座標が 480 を通過するときに速度を反転させるため、500 またはそれ以上に到達することは難しく、マウスを使用して賢明に加速することによってのみ達成できるため、しきい値を小さくする必要がある場合があります。

于 2012-12-12T22:03:29.877 に答える