1

窓の上からボールが落ちてくるようにしています。私はボール オブジェクトを ArrayList に格納していますが、現時点ではこれを行っています。

for (int i = 0; i < balls.size(); i++) {
    Ball b = (Ball) balls.get(i);
    if (b.isVisible()) {
        b.move();
    }

move 関数はボールの y 座標を変更するだけなので、ボールは画面の下に落ちます。

現時点では、すべてがまったく同時に描かれ、まったく同時に落ちています。

http://puu.sh/xsGF

ランダムな間隔で落下するようにするにはどうすればよいですか?

私の move() 関数は次のとおりです。

    public void move() {

    if (y > 480) {
        this.setVisible(false);
        System.out.println("GONE");
    }
    y += 1;
}
4

4 に答える 4

1

ゲームループ中にランダムにボールを追加できます。

//add new balls randomly here:
if(<randomtest>) {
    balls.add(new Ball());
}
for (int i = 0; i < balls.size(); i++) { 
  Ball b = (Ball) balls.get(i); 
  if (b.isVisible()) { 
      b.move(); 
  }
  else {
    //also might be good idea to tidy any invisible balls here
    //if you do this make sure you reverse the for loop
  }
}
于 2012-05-29T08:20:43.193 に答える
0

できることは 2 つあります。

  1. タイマーを追加します。タイマーがオフになったら (たとえば 10 ミリ秒ごと)、ランダムなボールを選択し、そのボールを 1px ドロップさせます。(注意してください、ランダムな要因により、異なる時間に異なる速度で落ちるボールが得られます

  2. ボールを初期化するときの速度にランダムな値を使用します。y 座標をその速度の値だけ増やして、ボールがすべて異なる速度でシーンを通過するようにします。

于 2012-05-29T08:18:49.527 に答える
0

一定の速度が必要な場合の最も簡単な方法は、ビューポートの上部にあるランダムな位置に配置することです。

すでに画面の外に描画していると思うので、そこにランダムな変位を追加するだけで完了です。例えば:

ball.y = -radius + random.nextInt(100);
于 2012-05-29T08:22:48.377 に答える
0

あなたの move 関数を見ると、これは実際には物理的に正しくありません。加速が必要です。これにより、よりリアルにボールが落ちるようになります(もちろん空気抵抗などはありますが、今のところはこれで十分だと思います)。それらがランダムな時間に落ちるようにするには、ランダムな時間に追加する (ランダムな時間のインスタンスで存在する/見えるようにする) か、またはそうすることができます。

class Ball {
  private double acc = 9.81; // or some other constant, depending on the framerate
  private double velocity = 0;
  private double startFallTime = Math.random()*100; // set from outside, not here!

  public void move() {
    // check if ball is already here
    if (startFallTime-- > 0) return;
    if (y > 480) {
      this.setVisible(false);
      System.out.println("GONE");
    }
    velocity += acc; 
    y += velocity;
  }
}

編集:もちろん、必要なものに応じて、アクセラレーションはオプションです。直線的な動きが必要な場合は、アプローチは問題ありません。ボールに加速があると見栄えが良くなります。;) また、ランダムなインスタンスでボールを追加することをお勧めします。これは物理的に正しくないため、使用したこの startFallTime では機能しません。ただし、ニーズに依存するため、自分で正しい方法を見つけ出す必要があります。

于 2012-05-29T08:23:38.230 に答える