Как я могу превратить файл изображения игровой карты в границы моей программы?

У меня есть изображение базовой игровой карты. Думайте об этом как о горизонтальных и вертикальных стенах, которые невозможно пересечь. Как я могу легко перейти от png изображения стен к чему-то в коде?

Сложный путь довольно прост... просто если я изменю карту изображения, я бы хотел простой способ перевести это в код.

Спасибо!

изменить: карта не на основе плитки. Это сверху вниз 2D.

5 ответов

Решение

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

Мне нужно больше деталей.

Основана ли ваша игровая плитка? Это 3d?

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

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

Если вам не нужно ничего предварительно вычислять, используя информацию о карте. Вы можете просто проверить логику времени выполнения, используя функцию, подобную getPixel(x,y).

Ну, я вижу два случая с двумя разными "лучшими решениями" в зависимости от того, откуда взялась ваша графика:

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

  2. Ваша графика - это просто какая-то графика (например, это может быть картинка или графика CG), и вы не ожидаете, что пиксели для блока будут такими же, как пиксели из другого блока. Вы все еще можете попытаться применить алгоритм "обнаружения краев" к своему изображению, но я предполагаю, что вам лучше разделить свое изображение на слой BG и слой FG, чтобы слой FG имел заранее определенный цвет (или альфа-канал). =0) и проверьте пиксели по этому цвету, чтобы определить, блокируются ли объекты или нет.

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

Удачи и приятного времяпровождения.

Другие вопросы по тегам