我有一个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
)。
然而,除非你需要通知其他侦听器碰撞,否则触发另一个事件来处理它可能没有意义;用动画代码来做是有意义的。
如果碰撞检测变得足够复杂,可能会影响性能,您可能需要将其转移到另一个线程中。不过,听起来您不太可能遇到这种特殊的复杂情况。