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 メソッドを使用すると...
me.intersects(それら) を返します || me.contains(それら);
...期待どおりに動作します。ただし、contains が単独で機能しない理由はまだわかりません。