我正在玩Slick 2d Java 游戏引擎。我正在尝试编写一些渲染逻辑,如果一个圆圈在一个正方形内,则它是绿色的。否则它是红色的。您可以在这张图片中看到我想要实现的目标:
我的问题是,当我使用 Slick2d 的Shape.contains(Shape)方法时,无论圆圈是否在正方形中,它总是返回 false。每当我使用 Java AWT Rectangle.contains(Rectangle)方法时,它都会正确返回 true。
这是我正在使用的一些(垃圾)代码。如果这会有所不同,我会将坐标存储为浮点数(因此对于 Java AWT 的矩形将转换为 int)。
public boolean contains(final Entity entity) { Rectangle me = new Rectangle(x, y, width, height); Rectangle them = new Rectangle(entity.getX(), entity.getY(), entity.getWidth(), entity.getHeight()); java.awt.Rectangle awtMe = new java.awt.Rectangle((int) x, (int) y, (int) width, (int) height); java.awt.Rectangle awtThem = new java.awt.Rectangle((int) entity.getX(), (int) entity.getY(), (int) entity.getWidth(), (int) entity.getHeight()); return awtMe.contains(awtThem); // returns true correctly //return me.contains(them); // never returns true }
我使用的是 Slick 版本 274。在游戏开发方面我非常绝望,所以这让我感到困惑。我曾尝试查看Shape.contains 的 Slick 源代码,但在这个阶段它有点超出我的想象。任何关于为什么会发生这种情况的建议将不胜感激。
编辑
好的,所以当我使用 Slick2d 方法时,如下所示......
返回我。相交(他们)|| 我.包含(他们);
...它按预期工作。我仍然不确定为什么 contains 不能单独工作。