0

私は初心者で、ゲームをしていて問題が発生しました

package minigames;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class fallingball extends JPanel {


   int x = 250;
   int y = 0;

   private void moveBall() {
      y = y + 1;


   }


   public void paint(Graphics g){
      super.paint(g);
      Graphics2D g2d = (Graphics2D) g;
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2d.setColor(Color.black);
      g2d.fillOval(x, y, 30, 30);
   }

   public static void main(String[] args) throws InterruptedException{
      JFrame f = new JFrame("Falling Ball");
      fallingball game = new fallingball();
      f.add(game);
      f.setSize(500, 500);
      f.setResizable(false);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      while (true) {
         game.moveBall();
         game.repaint();
         Thread.sleep(10);
      }
   }

}

ボールは1つしか発生せず、倒れてしまいます。フレーム内の異なる x 座標からランダムに落下するボールを生成したかったのですが、どうすればそれを行うことができますか?

4

1 に答える 1

0

あなたがしたいランダムなxのために

import java.util.Random();

と使用

Random rnd = new Random();
x = rnd.nextInt(<HIGHEST X VALUE POSSIBLE>)+1;

これにより、0 から X の最大値までのランダムな整数が作成され、それが x に割り当てられます。注 (rnd.nextInt(n) は 0 から n-1 までの値を作成するため、+1 です。
より多くのボールを落下させ続けるには、ループでこれを試してください。

while (true) {
     game.moveBall();
     game.repaint();
     Thread.sleep(10);
     if (y >= <MAX y>) {
      y = 0;
      x = rnd.nextInt(<max x>)+1;
    }
  }

画面から消えたときに y をリセットする必要があるだけです。そうしないと、表示されずにどんどん下がっていきます。これは迅速な解決策です。理想的には、オブジェクトを使用し、画面外のときにオブジェクトを作成/破棄します。これにより、ランダムに落下し続けるのは 1 つだけになります。必要に応じて調整してください。

また、ゲーム ループについてはこちらをお読みください:
http://www.java-gaming.org/index.php?topic=24220.0

while (true)

かなり悪いゲームループです

于 2013-08-16T13:21:47.033 に答える