Как распознать прикосновение нестандартного спрайт-изображения? - PullRequest
1 голос
/ 23 марта 2010

У меня есть спрайт, и если его коснуться, прикосновение должно быть распознано. Я использовал координаты, чтобы сделать это. Я взял координаты (min x, min y, max x, max y) изображения спрайта. Но изображение спрайта не является прямоугольной формой. Таким образом, даже если я коснусь координат вне спрайта и внутри прямоугольных границ, спрайт распознается. Но для моего приложения мне нужен только спрайт, который будет распознан. Итак, мне нужно взять только координаты спрайта, но это не правильная форма. Я использую CCSprite в своей программе.

Итак, что я могу сделать, чтобы был выбран только спрайт? Какие классы следует использовать для этого? Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 марта 2010

Вы можете попробовать один из следующих ...

  • Создайте ограничивающую рамку, меньшую, чем абсолютные размеры изображения спрайта. Да, это будет меньше, чем спрайт. Это исключит обнаружение щелчка мертвого пространства у спрайта, компромисс между частями вашего спрайта, который выглядит выбираемым, не будет

  • Используйте круговую ограничивающую область, чтобы определить, нажал ли пользователь на ваш спрайт. Опять же, у вас будет проблема с мертвым пространством в моем первом предложении, но сфера может дать вам лучшую зону покрытия по сравнению со спрайтом, что даст вам лучшие результаты при обнаружении касания

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

1 голос
/ 28 ноября 2010

Я сейчас создаю игру Cocos2D, и сейчас я делаю шаг вперед по своим спрайтам и вижу, какие из спрайтов попали в касание (они перекрываются в моем приложении)

Затем для каждого попадания в спрайт я использую [sprite convertTouchToNodeSpace], чтобы получить координату X, Y внутри спрайта, которую я могу использовать (хотя ось Y переворачивается) для ссылки на CGImage, с которым я создал спрайт.

Если пиксель в точке касания является «чистым», то есть альфа-0, тогда спрайт действительно не был затронут, и я проверяю следующий спрайт в z-порядке, чтобы увидеть, имеет ли он цвет там, где он был затронут.

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

Я понимаю, что это не супер эффективно, но у меня не так много спрайтов, и я делаю это только для касаний.

...