为什么 Slick2d 点不与矩形相交?

Why does a Slick2d Point not intersect a Rectangle?

当我执行这段代码时:

    Point p = new Point(1,1);
    Rectangle r = new Rectangle(0 ,0 , 10 ,10);

    if(p.intersects(r)){
        System.out.println("Collided");
    }

它从不打印 Collided。这是为什么?

两个对象都是

org.newdawn.slick.geom

实施,非标准 Java 个

这是个好问题。为了找出为什么我做了一些研究

Point p = new Point(0,0);
System.out.println(p.closed()); // TRUE
System.out.println(p.getPointCount()); // 1, logically

然后我在 Shape class 中的 Slick2d 存储库中搜索。我认为这些行是它不起作用的原因:

    boolean result = false;
    float points[] = getPoints();  // Get all points of our shape
    int length = points.length;  // count them. here length==1

    if (!closed()) {
        length -= 2;  // as we see the point is a closed shape, here length=-1
    }
    for(int i=0;i<length;i+=2) {  // Does not even enter the complicated work because length == -1
        // Complicated thing to test if intersect with a lot off points
    }
    return result; // here return false

这是你的问题的理由。不知道是bug还是开发者的意愿。你仍然可以设置一个问题。

作为解决方案,我建议构建一个 Rectangle(x,y,1,1) 并与之相交。这是你想要的工作,因为它是一个 4 点形状