Лучший способ проверить область касания, а не просто прямоугольник - PullRequest
3 голосов
/ 17 сентября 2009

Просто интересно, есть ли другой способ проверить область касания, используя многоугольник определенной формы, а не просто используя CGRectMake.

Вот тот же код для этого примера:

CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView: [touch view]]];
CGRect mySurface = CGRectMake(x, y, temp.contentSize.width, temp.contentSize.height);

if(CGRectContainsPoint(mySurface, location)) {
    // do something
    return kEventHandled;
}

Я думал о том, чтобы в операторе if было несколько объектов CGRect, но интересовался, есть ли лучший способ сделать это как что-то вроде карты изображений в html для якорей.

Ответы [ 2 ]

3 голосов
/ 18 сентября 2009

Рассмотрим CGPath:

Создайте путь, есть много доступных функций GPath. Тогда используйте:

Проверяет, содержится ли точка в графическом пути.

bool CGPathContainsPoint (
   CGPathRef path,
   const CGAffineTransform *m,
   CGPoint point,
   bool eoFill
);
0 голосов
/ 21 сентября 2009

В качестве альтернативы вы можете использовать физический движок, такой как Box2D или Бурундук, для обработки столкновений. Оба двигателя встроены в cocos2D. Таким образом, вы можете определить круги, квадраты, многоугольники ... и столкновения обрабатываются для вас. Это точно и, вероятно, также довольно быстро, хотя я не измерял это. С другой стороны, вы должны синхронизировать этот физический мир с вашими объектами и настроить все, что занимает немного времени.

Таким образом, вопрос всегда так: мне нужно, чтобы он был таким точным или достаточно хороши простые ограничивающие рамки?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...