2016-12-07 123 views
0

我正在做一个JavaFX应用程序,并且我有一个具有多个形状(圆形和矩形)的板添加到窗格。我不想让圆圈在矩形中移动。JavaFX:防止形状拖过另一个形状

允许使用鼠标事件(OnMousePressed,Dragged,Released)拖动圆,而矩形不允许移动。

我使用此代码来检测我的圆与矩形碰撞的时间。

private void checkIntersection(Shape block) { 
    boolean collisionDetected = false; 
    for (Shape static_bloc : nodes) { 
     if (static_bloc != block) { 
     Shape intersect = Shape.intersect(block, static_bloc); 

     if (intersect.getBoundsInLocal().getWidth() != -1) { 
      collisionDetected = true; 
     } 
     } 
    } 

    if (collisionDetected) { 
     System.out.println("Collision detected"); 
    } else { 
     System.out.println("Collision non deteted"); 
    } 
} 

我需要做的是让我的矩形不可能在拖动圆的同时拖动。我不想将形状发回他的初始位置。 有没有办法做到这一点使用相交或我错过了什么?

+0

@jewelsea你连接导致无处。 – Sedrick

+0

@Sedrick,谢谢,用正确的链接创建了一条新评论。也许学习[Oracle Paper doll](https://docs.oracle.com/javase/8/javafx/events-tutorial/paper-doll.htm)拖放示例。虽然我猜测它完全不适合你的用例。我认为你的问题有点太广泛,不能像书面答复。例如,将圆形拖到矩形上时会发生什么,它是否会落在矩形的边缘?它会回到原来的位置吗? – jewelsea

+0

@jewelsea谢谢你的帮助,我会检查一下这项研究。我不希望我的圆形形状进入矩形形状,所以理论上我不应该让我的应用程序将圆形拖到矩形上(它不应该是可能的)。我不想回到原来的位置,也不想回到原来的位置,我只是想阻止它,并让我拖着静止的方向,如果我愿意的话可以绕着矩形走。 –

回答

0

这不容易回答。你可以有一个例如GameObject的类。这个类包含你的形状。在这个GameObject类中,你有拖动逻辑的拖动操作&。然后你将有一个包含所有GameObjects列表的GameObjectManager类。并且GameObject的每个实例都将引用此GameObjectManager,因此也知道所有GameObjects。因此,在您的移动逻辑中,您可以检查特定GameObject类型之间是否存在某种冲突,以及是否可以停止移动。

防撞评估类游戏对象包含方法,如:

protected boolean isInCollision() { 
    for (GameObject gameObject : gameObjectManager.getAllGameObjects()) { 
     if (!gameObject.equals(this)) { 
      if (getView().getBoundsInParent().intersects(gameObject.getView().getBoundsInParent())) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

在你的情况,你需要循环只是一些类型的对象,在这个isInCollision方法。