Пиксельный поиск пути

Это продолжение предыдущего поста о простом движке для flash-игр. Тогда, в самом конце возникла мысль уйти от метода hitTest() и перейти на пиксельный просчёт. И чтобы сравнить оба способа и выбрать лучший вариант, сделал небольшой визуальный тест.

[kml_flashembed movie="http://xitri.com/wp-content/uploads/2008/09/mazeenginepixel.swf" height="200" width="550" /]

Кстати, в тот раз я написал не совсем правильный код. Команда break не выводила процесс из вложенного цикла и бессмысленно терялось много процессорных ресурсов. Странно, но никто по этому поводу не отписался. Значит либо все «внимательно» читают и пробуют, либо верят на слово 😉
Этот баг я поправил. Дальше по слайдам: Читать далее Пиксельный поиск пути

Простой движок для флэш-игр типа «Вид сверху»

Давно я не писал новых статей. На то есть много причин, главные из которых — отпуск и новая флеш-игра (как найдётся спонсор, выставлю её на обозрение). Блог не умер и не собирался умирать, новые материалы будут публиковаться по мере появления свободного времени. Многие вещи у меня лежат в полуготовом состоянии и дорабатываются до состояния «интересно» — раньше выкладывать нет смысла.

Ближе к теме. Есть множество flash-игр, в которых пользователь видит уровень как-бы с высоты птичьего полета — сверху. Одна из основных задач, с которыми сталкивается разработчик в таких играх — программно организовать проходимые зоны и препятствия.

Возьмём для примера простой случай — лабиринт. Персонаж может перемещаться по коридорам, но не должен проходить сквозь стены. Эту задачу можно решить по-разному, но чаще всего я встречал такие решения:

  1. Блочное решение. Карта разбивается на кубики и у каждого стенки задаются как свойства «left», «right», «top» и «bottom». Если объект вошёл в кубик, он свободно может по нему перемещаться. Перейти в соседний можно только если смежные грани не имеют стенок. Для оптимизации можно количество стенок уменьшить в 2 раза оставив только «left» и «top». Две остальные сработают у соседних кубиков.
  2. Реализовать физический движок с нулевой гравитацией.

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

[kml_flashembed movie="http://xitri.com/wp-content/uploads/2008/09/mazeengine.swf" height="200" width="550" /]

Большую часть работы выполняет старая добрая функция hitTest(). Для неё рисуется зона проходимости и персонаж может перемещаться только в её пределах. Если на карте есть горы, стены, водоёмы, дома — эти области просто не закрашиваются.

Пойдём от простого к сложному. Читать далее Простой движок для флэш-игр типа «Вид сверху»