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



我有一个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做到这一点?谢谢。

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

然而,除非你需要通知其他侦听器碰撞,否则触发另一个事件来处理它可能没有意义;用动画代码来做是有意义的。

如果碰撞检测变得足够复杂,可能会影响性能,您可能需要将其转移到另一个线程中。不过,听起来您不太可能遇到这种特殊的复杂情况。

最新更新