0

ご存知のように、私は宇宙に関する小さなゲームを書き始めました。

「悪いスタートではない」 - https://stackoverflow.com/questions/19818655/simulation-of-spaceplanets-and-stars :D

作品の構想を少し書きましたが、最初のポイントは「星のランダム生成」です。つまり、ランダムを使用する方が簡単です。

Random random = new Random();
int x = random.nextInt(getWidth()*2);
int y = random.nextInt(getHeight()*2);
g.drawImage(Image,x,y,4,4,this);

しかし、それは機能しません(

また、画面上で写真が「ジャンプ」するため、機能していません。

ビデオについて: https://www.youtube.com/watch?v=EELo_-eh3fA

では、どのようにして星をランダムに持ってくるのでしょうか? (スターは小さな画像または白い四角です) コードは以上です。

    import java.awt.Graphics;

    import javax.imageio.ImageIO;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import java.io.IOException;

    public class Game extends JComponent {

    public Game() {
     try {
       image  = ImageIO.read(getClass().getResource("star.png"));
      } catch (IOException e) {
                e.printStackTrace();
      }
    }

    public void paint(Graphics g) {
        super.paint(g);
        repaint();

        Random random = new Random();
        int x = random.nextInt(getWidth()*2);
        int y = random.nextInt(getHeight()*2);
        g.drawImage(Image,x,y,4,4,this);

    }

    public static void main(String[] args) {
        JFrame frame = new JFrame(NAME);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.add(new Game());
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setResizable(true);
        frame.addMouseListener(mos);
        frame.addMouseMotionListener(mos);
    }
}

これはコードが機能しないことです (写真は再びジャンプします。

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        repaint();
        Random random = new Random();
        int x = random.nextInt(getWidth()*2);
        int y = random.nextInt(getHeight()*2);
        g.drawImage(kor,x,y,10,10,this);
}

@camickr、repaint(); を削除すると言いました。でもそれがないと写真が撮れない

4

1 に答える 1

1
  1. paintComponent()カスタム ペイントは、paint() メソッドではなくメソッドをオーバーライドすることによって行われます。
  2. 描画メソッドで repaint() を呼び出さないでください。これにより、無限ループが発生します。

画像を修正するには?彼らがジャンプしなかったこと。

基本的には塗装方法以外で場所を決める必要があります。

カスタム ペインティング アプローチから始めて、パネル上に複数のオブジェクトをペイントするアイデアを得ることができるかもしれません。リストにオブジェクトを追加する最初のアプローチをお勧めします。したがって、複数のオブジェクトをリストに追加しますが、各オブジェクトにはランダムな場所が与えられます。

repaint(); を削除すると言いました。でもそれがないと写真が撮れない

私があなたに与えたリンクを見るのに時間がかかりましたか?例は、いつ repaint() を実行するかを示しています。

于 2013-11-06T18:20:17.267 に答える