Iphone Я использую cocos2d и мне нужно значение rgba пикселя на спрайте - PullRequest
3 голосов
/ 06 января 2010

Я программирую шутер в cocos2d для iphone. Я и я хочу исключить обнаружение столкновения альфа моего спрайта. Как мне прочитать значение RGBA одного пикселя. Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Прежде всего, подумайте, действительно ли вы хотите это сделать - это намного дороже в вычислительном отношении, чем другие методы обнаружения столкновений (например, ограничивающая рамка, столкновение по кругу), которые могут быть не такими точными, но для большинства целей работают хорошо достаточно.

Если вы действительно хотите это сделать, вы должны сгенерировать маску для каждого из ваших спрайтов, между которыми вы хотите обнаружить столкновение. В идеале эта маска должна быть простым 1-битным представлением вашего спрайта.

Далее, для каждого спрайта, который вы хотите проверить на столкновение, вам нужно сделать несколько шагов:

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

  2. Если вы знаете, что спрайты столкнулись на границах, вычислите прямоугольник столкновения. На этом этапе вы можете выполнить оптимизацию, которая говорит, что если они превышают X%, они столкнулись. Особенно, если ваши альфа-области спрайта расположены вдоль внешних краев.

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

Как видите, это очень сильно загружает процессор по сравнению с другими методами, поэтому я рекомендовал использовать его в начале. Если в системе нет аппаратной поддержки коллизий с точностью до пикселя (на самом деле это было у Atari 2600), большинство игр не будут использовать значения пикселов для коллизий.

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

Удачи!

0 голосов
/ 12 июля 2010

Не относится к Cocos2d, но должно работать на любом проекте iPhone - проверьте этот вопрос и ответ

...