Я играю с 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 не работает сам по себе.
contains
по назначению. Пробовали ли вы связаться с автором или просмотреть код демо-версии Webstart здесь?: slick .cokeandcode.com/static.php?page=demos - person jefflunt   schedule 14.04.2012