如何使图形随机出现并在与另一个图形碰撞时消失?

时间:2011-10-21 06:50:41

标签: java multithreading graphics random generator

我已经编写了一些关于移动图形的代码(被矩形包围),我正在尝试绘制另一个椭圆形(周围有一个矩形),它将随机生成。现在,它正在快速生成WAY,我不想使用Thread.sleep;因为它会停止听键(据我所知?)。任何善于多线程的人都可以帮助我做到这一点,或者知道如何在可移动图形触摸之前使图形显示。

主类中的图形生成器:

public void paintComponent(Graphics g){
    //System.out.println("X = " + al.x + ", Y = " + al.y);
    boolean intersect = false;
    int points = 0;

    g.drawString("Points: " + points, 5, 445);

    Rectangle r1 = new Rectangle(al.x, al.y, 10, 10);
    g.setColor(Color.BLACK);
    g.fillOval(al.x, al.y, 10, 10);

    Random randX = new Random();
    Random randY = new Random();
    int xInt = randX.nextInt(590);
    int yInt = randY.nextInt(440);

    Rectangle dCoin = new Rectangle(xInt, yInt, 10, 10);
    g.setColor(Color.YELLOW);
    g.fillOval(xInt, yInt, 10, 10);


        /*
         * (???)
         * 
         * for(int idx = 1; idx == 1; idx++){
         *      if(xInt < 590 && yInt < 440){
         *      }
         *  }
         *
         * Check if graphic collides with another:
         * 
         * if(r1.intersects(r2)){
         *      doSomething;
         * }
         *
         */
        repaint();
    }

}

BTW:r1环绕可移动图形,r2是围绕随机生成图形的矩形。我不得不在椭圆周围制作不可见的矩形来获得r1.intersects(r2)方法。

1 个答案:

答案 0 :(得分:1)

您应该使用Swing Timer类在Event Dispatch Thread上定期生成ActionEvent。这避免了应用程序对击键和其他用户输入没有响应的问题。

actionPerformed回调是您的路由中的一个钩子,用于移动和重新绘制您想要设置动画的对象。在动画例程中,您可以记录自上次调用方法以来经过的时间,以保持所需的速度。

Timer timer = new Timer(1000, new ActionListener() {
  long lastTime = System.currentTimeMillis();

  public void actionPerformed(ActionEvent evt) {
    long timeNow = System.currentTimeMillis();
    long timeEllapsed = timeNow - lastTime;
    lastTime = timeNow;

    if (timeEllapsed > 0L) {
      for (Moveable mv : moveables) {
        mv.updatePosition(timeEllapsed);
      }

      for (Drawable d : drawables) {
        d.repaint();
      }
    }
  }
});