2012-04-14 89 views
0

我正在玩Slick 2d Java游戏引擎。我试图写一些渲染逻辑,如果一个圆圈在一个正方形内,它就会变成绿色。否则它被涂成红色。你可以看到什么,我想在此图像中实现:Slick2d形状包含另一个形状

我的问题是,当我使用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 
} 

我用油滑版本274.我很绝望,当谈到游戏开发所以这一直困扰着我。我试过看Slick source for Shape.contains,但在这个阶段它比我高一点。任何意见,为什么发生这种情况将不胜感激。

编辑

好,如此看来,当我使用Slick2d方法如下...

回报me.intersects(他们)|| me.contains(它们);

...它按预期工作。我仍然不确定为什么包含它自己不工作。

+1

在Shape.intersects()(其中我也没有得到计算)的评论中,它说“如果UA和UB都在0和1之间,那么这些线相交“,所以我猜想他们的”交集“只在线相交时发生,而不是当另一个完全包含1个对象时。确实非常直观! – Torious 2012-04-14 00:34:28

+1

您需要单独的方法,因为通常您想知道有关十字路口(例如用于碰撞检测)与遏制的区别。但是,在我看来,你正在按照预期使用'contains'。您是否尝试联系作者,或者在此处查看Webstart演示的代码?:http://slick.cokeandcode.com/static.php?page=demos – jefflunt 2012-04-14 14:47:09

回答

相关问题