Обнаружение столкновений - одна из тех старых, скрытых проблем кодирования игры. Обычно люди используют метод предварительного расчета темного пингвина, когда на вашей статической карте нет места для размещения. Следующий шаг - найти способ указать наиболее эффективную карту столкновения.
Вы не хотите, чтобы ваша игра выполняла кучу математических операций в ответ на то, что пользователь перемещает свою мышь - она должна быть короткой и быстрой, поэтому критический предварительный расчет до чего-то быстрого очень важен.
Если ваша карта представляет собой сетку, то у вас есть ответ - карта столкновений представляет собой предварительно рассчитанный 2D-массив - в основном очень маленькое черно-белое изображение с пикселем для каждого места в сетке. Белые пиксели (1) можно разместить, а черные (0) - нет. Вы просто используете этот двумерный массив true / false в качестве поиска. Если вы хотите сэкономить память, вы можете объединить каждую полосу из 32 пробелов в сетке в один битовый флаг.
Если ваша карта не является сеткой, то вы все равно хотите пересчитать вещи, но стратегия немного сложнее. Первая возможность состоит в том, чтобы выполнить математику, подобную Hitesh, чтобы получить карту столкновений с немного более высоким разрешением, а затем все остальное точно как стратегия сетки - так, например, если каждый блок пикселей 4x4 был одним входом столкновения, то может ли быть башня поместил - тест на то, чтобы его координаты были проверены, чтобы быть на вершине достаточно 1-ых - Вы могли бы требовать, чтобы 100% тестов были 1-ыми, или Вы могли бы позволить им достигнуть немного и позволить 75% тестов быть 1-ыми.
Если это все еще не достаточно подробно, вы можете выполнить эти более сложные тесты полигонов, но вы хотите, чтобы они были максимально простыми. Если не использовать предварительно рассчитанную сетку, самый простой двухмерный тест на столкновение - это 2 круга - вы просто рассчитываете расстояние между их центрами и проверяете, больше или меньше его сумма радиусов. Если вы пересчитаете свой путь монстра в след из кругов, следующий шаг - разделить эти круги на ... угадайте, что ... сетка. Это предотвращает каждую проверку от проверки каждого круга на карте. Это позволяет вам иметь большое количество таких кругов на карте столкновений, поскольку тест столкновения - это сначала поиск элементов сетки, над которыми в данный момент находится башня, а затем проверка, сталкивается ли она только с теми кругами, к которым она ближе всего, чем вся карта. Важно отметить, что эта предварительно рассчитанная сетка списков кругов часто будет иметь один и тот же круг в нескольких соседних элементах сетки, поскольку каждая запись в сетке, которая содержит любую часть данного круга, должна иметь этот круг в контрольном списке столкновения.
Одна из приятных вещей в первых двух подходах к сетке заключается в том, что очень легко выполнить QA самостоятельно - буквально сохраните карту столкновений в виде изображения и визуально осмотрите ее, чтобы убедиться, что она выглядит правильно для карты, на которой она основана. Вы также можете нарисовать его вручную, если не хотите писать код для их генерации.
Подход по кругу дает правильные кривые и может привести к более точным деталям столкновения, но это, очевидно, сложнее проверить и убедиться, что на картах нет плохих карт столкновения. Это также больше работы, чтобы написать инструмент создания карт.
Удачи!