그래서 저는 Greenfoot 이라는이 프레임 워크에서이 하향식 2D 자바 게임을 만들고 있습니다. 저는 여러분이 싸울 사람들을 위해 AI를 연구하고 있습니다. 나는 그들이 현실 세계를 현실적으로 움직일 수 있기를 원하기 때문에 곧 다른 두 가지 중에서도 일종의 길 찾기가 필요하다는 것을 깨달았습니다.
두 개의 A * 프로토 타입을 만들었습니다. 하나는 그리드를 기반 으로 한 다음 웨이 포인트 와 작동하는 것을 만들었 으므로 이제 장애물 / 건물의 2D "지도"에서 경로를 만들 수있는 노드의 그래프로 이동하는 방법을 찾아야합니다. 실제 경로 찾기는 괜찮은 것처럼 보입니다. 열린 목록과 닫힌 목록만이보다 효율적인 데이터 구조를 사용할 수는 있지만 필요할 때 필요할 때 얻을 수 있습니다.
ai-blog.net 의이 게시물에 나와있는 모든 이유로 내비게이션 메시를 사용하려고합니다 . 그러나 내가 직면 한 문제는 A *가 다각형 중심 / 가장자리에서 가장 짧은 경로라고 생각하는 것이 노드의 일부를 통과하는 경우 반드시 최단 경로가 아니라는 것입니다. 더 나은 아이디어를 얻으려면 stackoverflow 에서 질문 한 내용을 볼 수 있습니다 .
가시성 그래프에 관한 좋은 대답을 얻었습니다. 그 이후로 나는 책 ( Computational Geometry : Algorithms and Applications )을 구입하여 주제를 자세히 읽었지만 여전히 탐색 메쉬를 선호하고 있습니다 ( Amit 's Notes에서 Path-Finding에 대한 " 복잡성 관리 " 참조 ). (부수적으로, 첫 번째와 마지막이 가려지지 않은 경우 Theta *를 사용하여 여러 웨이 포인트를 하나의 직선으로 변환 할 수 있습니다. 또는 마지막으로 돌아갈 때마다 마지막으로 웨이 포인트로 이동하여 이것에)
따라서 기본적으로 내가 원하는 것은 일단 깔때기 알고리즘 (예 : Digesting Duck 의이 알고리즘)을 통해 일단 탐색하면 탐색 노드입니다. 그러나 일부 다각형을 통과하고 노드 / 가장자리를 건너 뛸 수 있다는 점을 감안하면 실제로 가장 짧지는 않습니다.
아 그리고 나는 다각형에 관한 정보를 저장하는 방법을 알고 싶습니다. 웨이 포인트 프로토 타입 예제의 경우 각 노드를 객체로 만들고 해당 노드에서 이동할 수있는 다른 모든 노드의 목록을 저장했습니다. 폴리곤에서는 작동하지 않을 것 같습니다. 다각형이 열려 있거나 통과 가능한지 또는 단단한 물체인지 어떻게 알 수 있습니까? 다각형을 구성하는 노드를 어떻게 저장합니까?
마지막으로, 기록을 위해 : 이미 사용할 수있는 다른 솔루션이 있지만이 게임 이외의 다른 코드 에서이 코드를 사용하려고하지 않기 때문에 처음부터 직접 프로그래밍하고 싶습니다. 필연적으로 품질이 떨어질 것입니다.