如何表示两个形状接触的事件?JAVA
所以我有一个Blob形状,它实现了MoveableShape如何表示两个形状接触的事件?JAVA,java,events,actionlistener,graphics2d,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
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
)
然而,除非您需要将冲突通知其他侦听器,否则可能没有必要触发另一个事件来处理它;使用动画代码执行此操作是有意义的
如果碰撞检测变得足够复杂,可能会影响性能,则可能需要将其转移到另一个线程中。不过,听起来您不太可能遇到这种特殊的复杂情况。您需要对2D形状进行真正的碰撞检测,还是像示例中那样比较X坐标就足够了?坐标比较显然要简单得多,但在反转方向之前,图形中可能会有可见的重叠。@eaj后者很好。我唯一的问题是在actionPerformed中重复执行常量if语句。另外,这个类还有一个.getWidth()选项,所以最后我不会有重叠(我只是忘了在比较中包括它)。