我正在玩Slick 2d Java游戏引擎。我正在尝试编写一些渲染逻辑,如果一个圆圈在一个正方形内,它将显示为绿色。否则它是红色的。您可以在此图片中看到我想要实现的目标:
我的问题是,当我使用Slick2d的Shape.contains(Shape)方法时,无论圆圈是否在方格中,它总是返回false。每当我使用Java AWT Rectangle.contains(Rectangle)方法时,它都会正确返回。
这是我正在使用的一些(垃圾)代码。我将坐标存储为浮点数,如果这会产生影响(因此,对于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.在游戏开发方面我很无望,所以这让我很困惑。我试过看Slick source for Shape.contains但是在这个阶段它有点高于我。关于为什么会发生这种情况的任何建议都将不胜感激。
修改
好的,所以当我使用Slick2d方法时,似乎......
返回me.intersects(他们)|| me.contains(它们);
......它按预期工作。我仍然不确定为什么包含它本身不起作用。
答案 0 :(得分:1)
有同样的问题,有点。我看到这里有一个问题:https://bitbucket.org/kevglass/slick/issue/15/circle1intersects-circle2-returns-true