Методы создания 2D игрового мира - PullRequest
3 голосов
/ 26 февраля 2010

Я хочу сделать 2D-игру на C ++ с использованием движка Irrlicht . В этой игре вы будете управлять крошечным кораблем в какой-то пещере. Эта пещера будет создана автоматически (в игре будут случайные уровни) и будет выглядеть так:

Cave

Предположим, у меня уже есть точки многоугольника внутри пещеры (белая часть). Как мне визуализировать эту форму на экране и использовать ее для обнаружения столкновений? Из того, что я читал на разных сайтах, я должен использовать алгоритм триангуляции, чтобы создать сетки стен пещеры (черная часть), используя многоугольник внутри пещеры (белая часть). Затем я также могу использовать эти сетки для обнаружения столкновений. Это действительно лучший способ сделать это? Знаете ли вы, есть ли в Irrlicht некоторые встроенные функции, которые могут помочь мне достичь этого?

Любой совет будет оценен.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Описание того, как получить произвольную многоугольную форму для рендеринга с использованием заданного трехмерного движка, довольно длительный процесс. Достаточно сказать, что почти весь 3D-рендеринг выполняется в терминах треугольников, и если вы не использовали инструмент для создания модели, которая уже состоит из треугольников, вам нужно будет генерировать треугольники из любых имеющихся у вас данных. Триангуляция либо черного, либо белого пространства, вероятно, лучший способ сделать это, да. Затем вы можете создать список мешей или вершин из этого и визуализировать эти треугольники таким образом. Треугольники в списке также удваиваются для целей обнаружения столкновений.

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

1 голос
/ 26 февраля 2010

Чтобы проверить, находится ли точка внутри или снаружи полигона, вы можете просто пересчитать пересечения. Вы знаете (0,0) вне вашего многоугольника. Теперь нарисуйте линию оттуда до вашей контрольной точки (X, Y). Если эта линия пересекает нечетное количество ребер многоугольника (например, 1), она находится внутри многоугольника. Если линия пересекает четное число ребер (например, 0 или 2), точка (X, Y) находится вне многоугольника. Полезно один раз запустить этот алгоритм на бумаге, чтобы убедить себя.

1 голос
/ 26 февраля 2010

Один из вариантов - использовать карту (маску изображения) напрямую для проверки на столкновение.

Например,

if map_points[sprite.x sprite.y] is black then
   collision detected

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

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

...