Использование CGRectIntersectsRect для обнаружения столкновений - PullRequest
1 голос
/ 09 апреля 2010

У меня длинное прямоугольное изображение, повернутое под разными углами. Однако рамка прямоугольного изображения не вращается вместе с изображением, и вместо этого поворот приводит к увеличению рамки, чтобы соответствовать повернутому изображению. Поэтому, когда я использовал CGRectIntersectsRect, обнаружение столкновения полностью отключено, потому что другое изображение, сталкивающееся с прямоугольным изображением, столкнется, прежде чем оно даже достигнет видимой области прямоугольного изображения. Если вы не знаете, о чем я говорю, посмотрите на рисунок ascii:

нормальная прямоугольная рамка изображения, O -> пиксели, |, - -> frame

|----------|
|OOOOOOOOOO|
|----------|

после вращения

|----------|
|O         |
| O        |
|  O       |
|   O      |
|    O     |
|     O    |
|      O   |
|       O  |
|        O |
|----------|

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Если вы работаете на Mac, вы можете использовать -[NSImage hitTestRect:withImageDestinationRect:context:hints:flipped:], чтобы решить, пересекает ли конкретный прямоугольник непрозрачные пиксели на вашем изображении. См. Заголовок комментария для использования.

0 голосов
/ 09 апреля 2010

Вы не можете использовать frame свойство UIView для столкновения с повернутыми объектами, поскольку frame больше не действует, как только вы начинаете преобразовывать вид. Вам нужно придумать какое-то нестандартное решение. Что именно это будет, зависит от многих вещей, особенно от производительности.

Вы можете создать геометрический конверт столкновения для изображения, многоугольник, который вы можете вращать вместе с изображением. Или вы можете использовать идеальное обнаружение столкновений в сочетании с простой проверкой границ, чтобы избежать дорогостоящей проверки пикселей, когда это возможно. И, если вы действительно хотите стать модным, вы можете прибегнуть к некоторому полнофункциональному физическому симулятору, например Box2D .

Если вы хотите получить лучший совет, дайте нам больше подробностей. Как часто вам нужно проверять наличие столкновений? Однажды? 40 раз в секунду?

...