随机在屏幕上显示图像(JFrame)

时间:2013-11-06 18:05:53

标签: java awt

正如你已经知道的一切,我开始写关于太空的小游戏。

“不错的开始” - 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();但没有它,我没有得到一张照片

1 个答案:

答案 0 :(得分:1)

  1. 自定义绘制是通过覆盖paintComponent()方法而不是paint()方法完成的。
  2. 永远不要在绘画方法中调用repaint()。这将导致无限循环。
  3.   

    如何修复图片?他们没有跳。

    基本上,需要在绘画方法之外确定位置。

    也许您可以从Custom Painting Approaches开始,以了解在面板上绘制多个对象的想法。我建议第一种方法是将对象添加到List中。因此,您可以向列表中添加多个对象,但每个对象都将被赋予一个随机位置。

      

    你说要删除repaint();但没有它,我没有得到一张照片

    您是否花时间查看我给您的链接?这些示例显示了何时进行重绘()。