我正在做一个JavaFX应用程序,并且我有一个面板,其中添加了多个形状(圆形和矩形)到 Pane 中。我不希望圆移动到矩形上。
允许使用鼠标事件(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");
}
}
我需要做的是让我的矩形在拖动圆圈时无法拖动。我不想将形状发送回其初始位置。 有没有办法使用相交来做到这一点,或者我错过了什么?
最佳答案
这个问题并不容易回答。您可以拥有一个类,例如 GameObject。此类包含您的形状。在这个 GameObject 类中,您有拖放逻辑。然后你将有一个 GameObjectManager 类,其中包含所有游戏对象的列表。 GameObject 的每个实例都会有一个对此 GameObjectManager 的引用,因此也了解所有 GameObject。因此,在您的移动逻辑中,您可以检查特定游戏对象类型之间是否存在碰撞,以及是否可以停止移动。
对于碰撞评估类 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 方法中循环某些类型的对象。
关于JavaFX:防止形状拖动到另一个形状上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41025666/