2015-07-28 2 views
1

У меня есть игровой персонаж, который я оживляю вокруг экрана. По очень специфическим причинам этот символ должен находиться внутри DIV (off-canvas).A * Pathfinding off Canvas

Я рисую черно-белое изображение на холсте и зацикливая пиксельные данные, чтобы определить проходимые области персонажа. Прекрасно работает.

Теперь необходимо настроить поиск пути. Я прочитал тонну статей об использовании алгоритма A *, и это, кажется, имеет смысл ... когда вы перемещаете персонажа внутри игрового цикла.

Итак, как я смогу передать свою информацию о перемещении пути моему персонажу (DIV), когда они не будут нарисованы в цикле холста? Возможно ли это, или есть ли какие-либо известные способы обхода?

Спасибо!

+0

Итак, ваш вопрос «как вы реализуете поиск пути без центральной петли»? Возможно, это просто причина, о которой я мало знаю о элементе Canvas, но как вы хотите иметь прогрессию с течением времени без какого-либо механизма циклирования? – Daniel

ответ

1

Итак, ваше предположение состоит в том, что вам нужно переместить своего персонажа, чтобы завершить алгоритм A *. Вам не нужно перемещать ваш фактический персонаж. В принципе, вы создаете «симуляцию» вашего персонажа и доски и перемещаете это.

1-

создать представление вашей проходимой области в коде. Похоже, что вы в значительной степени сделали это, но вместо того, чтобы отображать его, храните его в массиве или что-то в этом роде; каким-то образом это имеет смысл для вас (2D-массив?).

2-

Вместо рисования и двигая фактический характер, в коде, пробежать A * алгоритма. Идея здесь состоит в том, чтобы решить проблему и узнать решение поиска пути до того, как ваш персонаж начнет двигаться. Существует несколько способов сделать это в зависимости от того, как A * реализован, но после его запуска вы хотите создать представление о пути, который вы хотите принять (начиная с (0,0), перейдите к (0,1), перейдите к (1,1) и т. д.).

3-

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

+0

Привет, Даниэль, большое спасибо за ваш ответ. Я добрался до второго шага, и проблема в том, что «перейдите к 0,0 перейти на 1,1», как вы объяснили. Похоже, мне придется переписать функцию моего персонажа, чтобы это разрешить. Это дает мне хорошее представление о том, как подойти к нему. Благодаря! : D – Aaron