如何发出两个形状触及的事件的信号? Java的

时间:2011-11-02 16:31:03

标签: java events actionlistener graphics2d

所以我有一个Blob形状,它实现了MoveableShape。

public interface MoveableShape
{
   void draw(Graphics2D g2);
   void translate(int dx, int dy);
}

假设Blob的实例b1击中另一个Blob,b2。一旦碰到另一个斑点,我希望它能改变它的方向。我怎么在java中发出这个信号?到目前为止,这是我一直在做的正常移动:

Timer t = new Timer(DELAY, new
     ActionListener()
     {
        public void actionPerformed(ActionEvent event)
        {
           b1.translate(1, 0);
           label.repaint();
        }
     });
  t.start();

我真诚地相信有一种更有效的方法来做到这一点,而不是用这个替换第6和第7行:

b1.translate(speed, 0);
label.repaint();
if(b1.getX()==b2.getX()) { speed = -speed }

我为没有记录每一个细节而道歉,但你应该从中得到一般的要点。是否可以向b1添加某种自定义事件以反转其方向,或类似的东西?此外,是否可以使用ActionListener执行此操作?感谢。

1 个答案:

答案 0 :(得分:0)

当形状发生碰撞时,您当然可以触发自定义事件,但您仍然需要编写代码来检测碰撞。如果您对当前的方法不满意,可能Shape.intersects()会有所帮助(假设您是子类Shape)。

但是,除非您需要通知其他侦听器,否则触发其他事件可能没有意义;使用动画代码进行操作是有意义的。

如果碰撞检测变得足够复杂,可能会影响性能,那么您可能需要将其移植到另一个线程中。听起来你不太可能遇到那种特殊的并发症。