Здається, ви вже відповіли на власне запитання. A *, мабуть, найкращий підхід. Так, звичайно, його можна використовувати в описаному вами способі, включаючи використання інформації про висоту, щоб уникнути гір. Поки ви маєте доступ до інформації про будь-яку сітку на поверхні вашого світу, немає жодних причин не використовувати її в евристиці A *.
Нарешті, ви плутаєте пошук шляху з контуром, який слідує в кінці запитання. Пошук шляху не стосується сили тяжіння, якщо ви не додасте його як евристичний і оскільки ви знаходитесь на поверхні планети, гравітація буде по суті однаковою для всієї поверхні. У багатьох іграх є гравітація разом з рухом, я не бачу причин, коли не можеш.
В основному ми хочемо, щоб карта переходила від червоного до синього, щоб бути однаковою на кулі, як на кубі.
Оскільки A * часто отримує сусідів до свого поточного вузла, ви можете легко створити набір функцій для отримання сусідніх вузлів. Так , наприклад, getXPlus()
, getXMinus()
,getZPlus()
і так далі. Ці функції приймуть поточний вузол і повернуть вузол у напрямку, визначеному назвою функції.
Більшу частину часу ці функції можуть просто збільшувати значення і виконуватись, проте, на краях, що зміниться.
Ви захочете відобразити поверхню куба на 2D системі координат. Однак ви вирішуєте, що вони не повинні вишикуватися, просто надайте кожному простору сітки унікальну координату X, Y.
Тепер, коли знаходиться на краю, і отримуючи сусідній простір сітки, це не обов'язково буде лише збільшувати координати. Ми повинні з'ясувати, до якого обличчя ми рухаємось, і перейти до координат цього обличчя.
Наприклад, отримання координати XPlus тут змінить і X, і Y координати, оскільки ми переходимо до нового простору сітки на новій грані. Зелена лінія являє собою край між двома гранями.
Тепер це лише глобальні координати, можливо, простіше використовувати внутрішню локальну систему координат з 3-м виміром, який представляє обличчя куба, на якому ви зараз перебуваєте.
У будь-якому випадку вам потрібно мати унікальну координату для кожного простору сітки на лицьовій стороні куба. Переміщення між ними залежатиме від того, як ви реалізуєте систему координат. Вам потрібно знати, де ці координатні карти також спрямовані на поверхню сфери.
Зрештою, все це слід абстрагувати, щоб ви навіть про це не знали.