2012-04-14 86 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

回答

相關問題