Собираюсь ли я сожалеть об использовании цветной системы обнаружения столкновений?

7

Я только начинаю строить свою первую игру с XNA (у меня есть опыт работы с C #, но не с играми).

Я строю довольно простой 2D шутер сверху вниз. Я прочитал этот урок по использованию цветовой системы столкновений, и это звучит очень круто для меня. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Это означает, что я могу быстро создавать уровни, используя любую графическую программу, и мне не нужно определять свои пейзажи (стены, деревья и т. Д.) В терминах коллизий и т. Д.

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

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

Любой совет для новичка очень ценится!

TerryB
источник

Ответы:

6

Вы заметили свои наблюдения в отношении возможностей подхода коллизий на основе растровых изображений.

Этот метод обеспечивает действительно простой способ редактирования ваших уровней с помощью любой программы, которая может выводить растровое изображение (любая программа для редактирования изображений). Эта система также очень гибкая, когда вы хотите определить различные типы грунтов. Скажи greenза грязь и redза сплошное подполье. Затем вы легко запрашиваете текущий пиксель и определяете тип андеграунда, на котором стоит игрок. Даже пандусы (уклоны от грунта типа A до B) возможны без особых проблем.

Проблемы возникают с обнаружением столкновений. Легко обнаружить пересечение с другим объектом (просто выполнить пиксельный тест), но трудно (вычислительно дорого) выяснить, с какой ориентацией имеет объект, с которым вы столкнулись. Это особенно важно, когда вам нужна нормаль поверхности, чтобы правильно отклонять объекты .

Также очень быстро движущиеся объекты могут быть проблемой, особенно если у вас есть тонкие (например, 1 пиксель) объекты, с которыми можно столкнуться. Есть этот вопрос, который уже охватывает эту тему.

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

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

bummzack
источник
По моему опыту, проблема нормальной поверхности довольно тривиальна по сравнению с фактическим определением углового импульса после удара в системе обнаружения столкновений с идеальной точностью пикселей. Обычно PPCD не используется для игр, требующих такого уровня детализации, хотя, вероятно, потому, что он делает вещи намного сложнее, чем физика на основе векторов, в этом отношении. Другой проблемой, с которой я столкнулся при таком подходе, была возможность «застрять», когда вы поворачиваете своего персонажа в определенных позициях на своем уровне. Box2D и т.п. справляются с этим, раздвигая центроиды, когда они находятся слишком близко.
инженер
Огромное спасибо! Я не планирую делать какие-либо отклонения, поэтому я думаю, что все в порядке. Я не был уверен, что делать с быстрыми пулями, которые могут пропустить стены в одном кадре. Выяснить, если они пересекли стену, кажется нормальным, просто возьмите образец изображения карты в длинном тонком прямоугольнике, который является путем пули, и ищите цветные пиксели стены. Но вычислить первый пиксель стены, который он бы ударил, кажется немного сложнее. Я думаю, когда пуля разражается первыми, я отправляю лучи радиопередачи и снимаю несколько образцов пикселей с короткими интервалами вдоль луча, ища первый пиксель стены и отмечаю это как точку удара?
TerryB
2
@TerryB: Я думаю, что алгоритм линии Брезенхэма будет отлично работать здесь. Нарисуйте линию, пока не достигнете пикселя стены, и это будет ваша точка столкновения.
bummzack