Как сигнализировать о событии, которое коснулось двух фигур? Джава - PullRequest
1 голос
/ 02 ноября 2011

Итак, у меня есть форма 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 голосов
/ 03 ноября 2011

Конечно, вы можете запустить произвольное событие, когда фигуры сталкиваются, но вам все равно нужно написать код для обнаружения столкновения.Если вы недовольны своим текущим подходом, возможно, Shape.intersects() поможет (при условии, что вы подклассифицируете Shape).

Однако, если вам не нужно уведомить других слушателей о столкновении, вероятно, нет смыслав запуске другого события, чтобы справиться с этим;имеет смысл сделать это с помощью кода анимации.

Если обнаружение столкновений становится достаточно сложным, что может повлиять на производительность, вам, вероятно, придется перетасовать это в другой поток.Похоже, что вы вряд ли столкнетесь с этим конкретным осложнением.

...