"Rectangle cannot be converted to bounds" 使用 rectangle.intersect()?

"Rectangle cannot be converted to bounds" using rectangle.intersect()?

所以我从一个矩形传递双精度值以查看它是否与另一个矩形相交。我将属性值 (x, y, w, h) 作为参数传递给函数,然后在其中创建一个矩形并将参数设置为其属性。然后我使用 rectangle.intersects(rect) 测试它以查看它们是否重叠。代码如下。

问题: inputRectangle.intersects(scannedRectangle); 行给出了一个错误 "Incompatible types: Rectangle cannot be converted to bounds.

A Google 和 SO 搜索没有针对该错误的结果。

我怎么弄错了?谢谢

import javafx.scene.shape.Rectangle;
-----------^^^^^^^^^^^^^^^^------------

public boolean isIntersectingNode(double inputX, double inputY, double inputWidth, double inputHeight)
{

    Rectangle inputRectangle = new Rectangle(inputX, inputY, inputWidth, inputHeight);
    double newX = 20, newY = 20, newW = 20, newH = 20;

    Rectangle scannedRectangle = new Rectangle(newX, newY, newW, newH);

    return inputRectangle.intersects(scannedRectangle);  <<<<<<<ERROR HERE

}

注意:我稍微简化了代码。但是无论我如何更改代码,函数中的 scannedRectangle 段都会出现该错误。

请注意 intersects() requires an object of type Bounds as parameter. A Rectangle does not inherit from Bounds and hence cannot be used here. You may want to try one of the getBounds...() 获取边界然后相交的方法。

错误是因为 Node.intersects accepts a Bounds 对象作为输入参数:

public boolean intersects(Bounds localBounds)

Returns true if the given bounds (specified in the local coordinate space of this Node) intersects the shape of this Node.

另一方面,在您的 isIntersectingNode 方法中,您没有将 Rectangle 实例添加到场景图中,因此无法检查交叉点,因为它们没有坐标 space.

作为解决方案,您可以使用原始 Rectangle 对象,该对象附加到场景图并执行,例如:

 rect.getBoundsInParent().intersects(x, y, w, h);

javafx.scene.shape.Rectangle 是一个 Node。由于您没有将这些对象用作场景的一部分,因此最好使用 javafx.geometry.Rectangle2D 检查交叉点。此 class 不会扩展 Node,它允许您检查 2 Rectangle2D 是否有交集。

public boolean isIntersectingNode(double inputX,
                                  double inputY,
                                  double inputWidth,
                                  double inputHeight) {

    Rectangle2D inputRectangle = new Rectangle2D(inputX, inputY, inputWidth, inputHeight);
    double newX = 20, newY = 20, newW = 20, newH = 20;

    Rectangle2D scannedRectangle = new Rectangle2D(newX, newY, newW, newH);

    return inputRectangle.intersects(scannedRectangle);
}