Проблема столкновения - PullRequest
       34

Проблема столкновения

0 голосов
/ 06 ноября 2010

У меня проблема с проверкой колоризации объектов, нарисованных на экране.Например: в настоящее время я делаю игру со змеями, и мне нужно проверить, поражает ли змея определенный объект блока (что увеличивает змею и увеличивает счет, когда змея поражает / «съедает» блок).Поэтому я сделал функцию проверки столкновения между змеей и блочным объектом, но она не работает правильно (при перемещении по объекту со змеей справа вверху это работает, но в противном случае это не так):

public boolean checkColision() {
    if(SnakeObjs.get(0).x >= obj.x && SnakeObjs.get(0).x
                <= obj.x+10 && SnakeObjs.get(0).y
                >= obj.y && SnakeObjs.get(0).y <= obj.y+10) {
        return true;
    }else{
        return false;
    }
}

Эта функция проверяет столкновение.Где SnakeObjs.get(0) содержит x и y хорды объекта змея, который должен поразить объект блока, а obj содержит x и y координаты объекта блока, чтобы проверить столкновение с.

PaintМетод, рисующий как блочный объект, так и змеиный объект, выглядит следующим образом:

public void paint(Graphics g) {
    for(int i=0;i<SnakeObjs.size();i++) {
        g.setColor(new Color(
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0)));
        g.fillRect(SnakeObjs.get(i).x, SnakeObjs.get(i).y, 10, 10);
        g.setColor(Color.WHITE);
        g.drawRect(SnakeObjs.get(i).x-1, SnakeObjs.get(i).y-1, 12, 12);
    }
    g.setColor(new Color(
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0)));
    g.fillRect(obj.x, obj.y, 10, 10);
    g.setColor(Color.BLACK);
    g.drawString("Score: "+score, 10, 10);
}

Если кто-нибудь может помочь мне с этой проблемой столкновения, было бы здорово.

Заранее спасибо,

С наилучшими пожеланиями, Skyfe.

1 Ответ

0 голосов
/ 06 ноября 2010

Ошибка в том, что один объект интерпретируется как прямоугольник, а другой - как точка.Вы проверяете, находится ли точка в прямоугольнике, а не пересекаются ли оба прямоугольника.Чтобы он работал справа и сверху.

Я рекомендовал сохранить прямоугольник для змеи и объекта.Объявление метода getBounds ().тогда вы можете использовать метод intersect () из Rectangle.Вы также можете использовать эти границы для вашей операции рисования.

...