所以我有一个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执行此操作?感谢。
答案 0 :(得分:0)
当形状发生碰撞时,您当然可以触发自定义事件,但您仍然需要编写代码来检测碰撞。如果您对当前的方法不满意,可能Shape.intersects()
会有所帮助(假设您是子类Shape
)。
但是,除非您需要通知其他侦听器,否则触发其他事件可能没有意义;使用动画代码进行操作是有意义的。
如果碰撞检测变得足够复杂,可能会影响性能,那么您可能需要将其移植到另一个线程中。听起来你不太可能遇到那种特殊的并发症。