Как добиться идеального столкновения пикселей для многих спрайтов в cocos2d?

#iphone #cocos2d-iphone #collision-detection #pixel-perfect

#iPhone #cocos2d-iphone #обнаружение столкновения #пиксель-идеальный

Вопрос:

в моем приложении у меня есть игрок и много врагов (около 100 )..Я не хочу использовать CGRects, потому что это не подходит для врагов. Есть ли какой-нибудь пример, как выполнить обнаружение идеального столкновения пикселей в cocos2d для многих спрайтов?

Некоторое объяснение было бы отличным 😉

Большое вам спасибо!

РЕДАКТИРОВАТЬ: я использую файлы CCSprite и .png. png обладает прозрачностью, но он должен обнаруживать столкновение только с непрозрачными пикселями.

Редактировать: Мои враги круглые.

Комментарии:

1. хм .. насколько велики враги??

2. 25×25 пикселей. Позже они будут немного меньше

3. приведет ли большое изображение к замедлению обнаружения? Может быть, есть другое решение для этого? (нет, я не хочу использовать box2d или chipmunk..it слишком большой для моих целей)

4. хаха .. вы не используете cgrects? Столкновение пикселей требует еще больше ресурсов процессора.. Формы ближе к круглым?

5. мои фигуры имеют круглую форму: D есть ли лучшая возможность для круглых форм?

Ответ №1:

Коллизия Circle-circle самая простая.. И вычисления самые быстрые.. Я надеюсь, вы знаете радиус игрока и радиус врага.. Пусть 20 будет радиусом игрока, а 10 — радиусом противника.. Простой расчет будет:

 float dx = player.spr.x - enemy.spr.x;
float dy = player.spr.y - enemy.spr.y;
float dxy = dx*dx   dy*dy;
float collisionRad = (20 10)*(20 10);

if(dxy<= collisionRad)
{
//collision
}
  

Мы вычисляем расстояние между двумя точками, используя теорему Пифагора..
http://en.wikipedia.org/wiki/Pythagorean_theorem

Комментарии:

1. 1 и принято (потому что похоже, что это сработает). Я попробую это 🙂