Обнаружить, что SKShapedNode закрыт

В моей будущей игре (в SpriteKit) мне нужно рисовать круглые формы. Я использую CGMutablePathRef и SKShapeNode для рисования самого себя.

На touchesEnded мне нужно проверить, закрыл ли пользователь круг или есть ли промежуток между начальным и конечным касанием. (Строго говоря, это может быть не только правильный круг, мне нужно обнаружить любую замкнутую форму, например петлю...)

Как я могу сделать эту проверку?


person Yevgeniy Leychenko    schedule 31.03.2015    source источник
comment
CGPath не имеет функции пересечения, поэтому нет простого встроенного способа проверки.   -  person sangony    schedule 31.03.2015


Ответы (1)


  1. Сохраните места касаний (точки) в массиве: [yourArray addObject:[NSValue valueWithCGPoint:yourPoint]];
  2. Сделайте прямоугольник (размер? на ваш выбор! чем он меньше, тем точнее) вокруг первой точки в массиве (местоположение первого касания).
  3. Контролируйте, содержит ли прямоугольник также последнюю точку в массиве (местоположение последнего касания).
  4. Если да, то закройте свой путь.
person suyama    schedule 31.03.2015
comment
Сохранение точек касания не является точным методом. Подвижные точки касания перескакивают с точки на точку с промежутками между ними. Это означает, что вы можете пересечь линию и не иметь той же сохраненной точки в вашем массиве. - person sangony; 31.03.2015
comment
Я согласен, что этот метод теряет некоторые экземпляры, когда создается петля, а не круг. Но на данный момент это лучшее, что у меня есть, и оно в значительной степени позволяет мне делать то, что мне нужно. Благодарю вас! - person Yevgeniy Leychenko; 31.03.2015
comment
Почему определение точек касания в массиве не является точным методом? raywenderlich.com/61289/ Помимо этого, ответ заключается в том, чтобы контролировать, содержит ли прямоугольник вокруг первой точки также и последнюю точку касания. Если да, то путь можно закрыть. - person suyama; 31.03.2015
comment
Это то, что я на самом деле сделал после того, как вы дали мне подсказку о том точном прямоугольнике вокруг первого касания. - person Yevgeniy Leychenko; 31.03.2015