Фигура Slick2d содержит другую фигуру

Я играю с Slick 2d игровым движком Java. Я пытаюсь написать некоторую логику рендеринга, где, если круг находится внутри квадрата, он окрашен в зеленый цвет. В противном случае он окрашен в красный цвет. Вы можете увидеть, чего я пытаюсь добиться на этом изображении:

Моя проблема в том, что когда я использую Slick2d, Shape.contains(Shape), он всегда возвращает false независимо от того, находится ли круг в квадрате. Всякий раз, когда я использую Java AWT Rectangle.contains(Rectangle) метод вернет true правильно.

Вот какой-то (мусорный) код, который я использую. Я сохраняю координаты как числа с плавающей запятой, если это имеет значение (отсюда приведение к int для прямоугольника Java AWT).

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, но на данном этапе он немного выше меня. Любые советы относительно того, почему это происходит, будут оценены.

ИЗМЕНИТЬ

Итак, кажется, что когда я использую методы Slick2d следующим образом...

верни меня.пересекает(их) || я.содержит(их);

... он работает так, как ожидалось. Я все еще не уверен, почему contains не работает сам по себе.


person Ben J    schedule 14.04.2012    source источник
comment
В комментариях к Shape.intersects() (которого я также не получаю вычислений) говорится, что если UA и UB находятся между 0 и 1, то линии пересекаются, поэтому я предполагаю, что их пересечение происходит только тогда, когда линии пересекаются, а не тогда, когда 1 объект полностью содержится в другом. Действительно, очень нелогично!   -  person Torious    schedule 14.04.2012
comment
Вам нужны отдельные методы, потому что часто вы хотите знать о пересечениях (например, для обнаружения столкновений) отдельно от сдерживания. Однако мне кажется, что вы используете contains по назначению. Пробовали ли вы связаться с автором или просмотреть код демо-версии Webstart здесь?: slick .cokeandcode.com/static.php?page=demos   -  person jefflunt    schedule 14.04.2012


Ответы (1)


Такая же проблема, вроде. Я вижу здесь есть проблема: https://bitbucket.org/kevglass/slick/issue/15/circle1intersects-circle2-returns-true

person Mattias Nordqvist    schedule 14.03.2013