이미 본인의 질문에 답변 한 것 같습니다. A *가 최선의 방법 일 것입니다. 물론 산을 피하기 위해 높이 정보 사용을 포함하여 설명하는 방식으로 사용할 수 있습니다. 세계 표면의 그리드에 대한 정보에 액세스 할 수있는 한 A * 휴리스틱에서 사용할 수없는 이유는 없습니다.
마지막으로, 질문 끝에 경로 찾기와 경로 찾기를 혼동합니다. 경로 발견은 휴리스틱으로 추가하지 않는 한 중력에 관심이 없으며 행성 표면에 있으므로 중력은 본질적으로 전체 표면에서 동일합니다. 많은 게임이 운동과 함께 중력을 가지고 있습니다.
기본적으로 우리는 빨강에서 파랑으로가는지도를 만들고, 구체와 동일하게 정육면체와 같습니다.
A *는 종종 현재 노드에 인접 노드를 가져 오므로 인접 노드를 가져 오기위한 함수 세트를 쉽게 작성할 수 있습니다. 예를 들어, getXPlus()
, getXMinus()
, getZPlus()
과에 이렇게. 이 함수는 현재 노드를 가져와 함수 이름으로 지정된 방향으로 노드를 반환합니다.
대부분의 경우 이러한 기능은 값을 증가시키고 가장자리에서 변경 될 수 있습니다.
큐브 표면을 2D 좌표계에 매핑하려고합니다. 그러나 이것은 당신에게 달려 있습니다. 그들은 정렬 할 필요가 없으며 각 그리드 공간에 고유 한 X, Y 좌표를 부여하십시오.
이제 가장자리에있을 때 인접한 그리드 공간을 얻는 것이 반드시 좌표를 증가시키는 것은 아닙니다. 우리는 우리가 움직 인 얼굴을 찾아 그 얼굴의 좌표로 전환해야합니다.
예를 들어 XPlus 좌표를 여기에 가져 오면 새면의 새 그리드 공간으로 이동하기 때문에 X와 Y 좌표가 모두 변경됩니다. 녹색 선은 두면 사이의 모서리를 나타냅니다.
이제 이것들은 전역 좌표 일뿐입니다. 현재 사용중인 큐브면을 나타내는 3 차원의 내부 로컬 좌표계를 사용하는 것이 더 쉬울 수 있습니다.
어느 쪽이든, 큐브면의 각 그리드 공간에 대해 고유 한 좌표가 있어야합니다. 그들 사이를 순회하는 것은 좌표계를 구현하는 방법에 달려 있습니다. 좌표가 구의 표면에 매핑되는 위치를 알아야합니다.
이 모든 것을 결국 추상화하여 알지 못하도록해야합니다.