Неисправный код столкновения прямоугольников

#objective-c #collision-detection

#objective-c #обнаружение столкновения

Вопрос:

У меня есть следующий код:

  (bool)Point:(CGPoint)point isInRectangle:(CGRect)rect
{
    int rectx1 = rect.origin.x;
    int recty1 = rect.origin.y;
    int rectx2 = rect.origin.x   rect.size.width;
    int recty2 = rect.origin.y   rect.size.width;
    int pointx = point.x;
    int pointy = point.y;
    return (pointx >= rectx1 amp;amp; pointx <= rectx2) amp;amp; (pointy >= recty1 amp;amp; pointy <= recty2);
}
  

Предполагается, что он обнаруживает столкновение между двумя прямоугольниками, но я не получаю правильное значение. Кто-нибудь может мне помочь?

Ответ №1:

Почему бы просто не использовать встроенные функции геометрии?

 CGRect CGRectContainsPoint(CGRect rect, CGPoint pt);
CGRect CGRectIntersectsRect(CGRect rect1, CGRect rect2);
  

Для этого они и существуют. 🙂 Документы для этих и многих других полезных функций по адресу: http://developer.apple.com/library/ios/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

Ответ №2:

Я думаю, что здесь:

 int recty2 = rect.origin.y   rect.size.width;
  

вы, вероятно, имели в виду:

 int recty2 = rect.origin.y   rect.size.height;
  

Но вы должны знать, что уже существует функция C CGRectContainsPoint (rect, точка), которая делает то, что вы хотите. Поэтому вам не нужно писать его, если вы этого не хотите.

Ответ №3:

Одна из этих строк должна иметь высоту, а не ширину.

 int rectx2 = rect.origin.x   rect.size.width;
int recty2 = rect.origin.y   rect.size.width;