2012-04-14 2 views
0

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

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

Вот какой-то (мусор) код, который я использую. Я сохраняю координаты как float, если это имеет значение (отсюда и cast to 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. Я довольно безнадежным, когда речь идет о разработке игр, так это меня озадачило. Я пробовал посмотреть на Slick source for Shape.contains, но на этом этапе он немного выше меня. Любые советы относительно того, почему это происходит, будут оценены.

EDIT

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

возвращение me.intersects (их) || me.contains (них);

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

+1

В комментариях Shape.intersects() (из которых я тоже не получаю расчет), он говорит: «Если UA и UB находятся между 0 и 1, тогда линии пересекаются. ", поэтому я думаю, что их« пересечение »происходит только тогда, когда пересекаются прямые, а не когда 1 объект полностью содержится другим. На самом деле очень противно-интуитивно! – Torious

+1

Вам нужны отдельные методы, потому что часто вы хотите знать о пересечениях (например, для обнаружения столкновений) отдельно от локализации. Однако мне кажется, что вы используете 'contains', как предполагалось. Вы пробовали связаться с автором или посмотреть код для демо-версий Webstart здесь: http://slick.cokeandcode.com/static.php?page=demos – jefflunt

ответ

Смежные вопросы