2013-07-28 2 views
-1

у меня есть игра с пулями и монстрами, где мне нужно освободить от пуль и монстров, когда они столкнулись с помощью прямоугольников, однако, когда происходит столкновение метод не возвращает истинупрямоугольник обнаружения столкновения не работает

вот что я сделал : я установить границы для каждой пули/монстра

bounds.left = (int)X; 
bounds.top = (int)Y ; 
bounds.right = (int)X + monsterWidth; 
bounds.bottom = (int)Y + monsterHeight; 

затем сделал булево метод

return bounds.intersect((int)X,(int) Y ,(int) X + monsterWidth, (int) Y + monsterHeight); 

я есть эта бо НСР и тогда я называю их на gamethread

int i=0, j=0; 
     while (!monster.isEmpty() && monster.size()>i){ 
      j=0; 
      while (!bullets.isEmpty() && bullets.size()>j){ 
       if(monster.get(i).isColliding(bullets.get(j).getBounds())){ 
        Log.v("collided", "Collided!"); 
        monster.get(i).setRelease(true); 
        bullets.get(j).setRelease(true); 
       } 
       j++; 
      } 
      i++; 
     } 

У меня есть журнал по каждому за пределы, и оба из них являются правильными левый < = правый верхний < = нижний однако в методе iscolliding нет журнала , я попробовал instersects (левый, верхний, правый, нижний), но все тот же.

+0

Предполагается, что она ориентирована по оси (не вращается) ing) прямое исправление столкновений? – Bisder

+0

Да, она ориентирована по оси, пересекается только для вращающихся прямоугольников? – NoobMe

+0

Я не уверен в этом, так как я никогда не использовал его, я просто сделал свой собственный метод проверки пересечений, который я продемонстрировал вам ниже. Проверьте это – Bisder

ответ

1

Это мой прямоугольник, чтобы Rect метода проверки столкновений (предполагая, что оба прямоугольников имеют ось выровненную)

where x1 is x start 
where x2 is x1 + rect width 
where y1 is y start 
where y2 is y1 + rect height 

_x1, _x2, _y1, _y2 использует ту же формулу, но представляющий второй прямоугольник.

bool boolResult = false; 

    if (x2 >= _x1 && x1 <= _x2 && y2 >= _y1 && y1 <= _y2) 
    { 
     boolResult = true; 
    } 

return boolResult; 

Это работает для меня, так что увидеть, если он может работать для вас

+0

ok я попробую это спасибо – NoobMe

0

я решил, изменив:

return bounds.intersect 

в

bounds.contains(r) 

это так. ~

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