Проверьте столкновения между двумя объектами в Java - PullRequest
1 голос
/ 07 апреля 2011

У меня есть метод, который проверяет, пересекаются ли игрок и предмет, и добавляет предмет в инвентарь, но кажется, что этот метод работает, только если прямоугольники полностью перекрываются, и предмет не обнуляется, если я специально не скажу так в панели. В противном случае элемент продолжает перемещаться по панели, как будто ничего не произошло.

public boolean obtainItem(Item item)
{
    if (item.moveable)
    {
        Rectangle p = getBounds();
        Rectangle i = item.getBounds();
        if (p.intersects(i))
        {
            inventory.add(item);
            i = null;
            System.out.println("hello");
            return true;
        }
    }
    return false;
}

Код для моих методов getBounds ():

public Rectangle getBounds () { границы = новый прямоугольник (x, y, 40, 40); вернуть границы; }

И он возвращает правильные границы

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Javadoc для Rectangle ясно указывает на то, что если пересечение не равно нулю, то rectangle.intersects() return true в противном случае false.

Возможно ли, что ваши методы item.getBounds() и getBounds() возвращают границы относительно различных ограничивающих компонентов?

1 голос
/ 07 апреля 2011

элемент не обнуляется, если я не сказал об этом на панели.

Почему это должно быть иначе?i = null; просто устанавливает локальную переменную i в null.

0 голосов
/ 07 апреля 2011

Весь этот код выглядит нормально, при условии, что вы используете java.awt.Rectangle, как указано в iluxa.Скорее всего, это ошибка в вашем классе Item.Вы можете опубликовать это?

...