2D 길 찾기-부드러운 길 찾기


10

간단한 길 찾기를 구현하려고했지만 결과가 달성하려는 것보다 덜 만족 스럽습니다. 문제는 Starcraft 2와 같은 게임의 모든 단위가 모든 방향으로 움직이는 반면 내 경우의 단위는 최대 8 개의 방향 (Warcraft 1 스타일)으로 만 움직입니다. . Starcraft 2에서와 같은 결과를 얻으려면 어떻게해야합니까? 타일 ​​크기를 줄입니까?

http://i.stack.imgur.com/lr19c.jpg

그림에서 장애물이되는 수평선의 가로줄과 녹색 타일로 표시된 경로를 볼 수 있습니다. 빨간 선은 내가 성취하고 싶은 길입니다.


아직 구현할 시간을 찾지 못했지만 점프 포인트 검색의 열렬한 팬입니다. 그러나 설명서는 흥미롭고 성능이 좋습니다.

2
그것이 당신이 원하는 길인지 확신합니까? 그것을 사용하는 유닛은 부분적으로 벽을 통과합니다. 나는 또 다른 예에서 더 가시화 : i.imgur.com/eh4ZR.png 여기 그리고 당신은 아마 정말 달성하고자하는 내용은 다음과 같습니다 i.imgur.com/vFQg4.png
마르쿠스 폰 Broady

당신의 말이 옳았습니다. 나의 길은 결함이 있었지만, 그것은 설명을위한 목적에 대한 것이 었습니다.
Kooi Nam Ng

원하는 것을 얻으려면 타일 내에 분수 좌표가 있어야합니다. 이것 없이는 가능한 경로가 없습니다-분수를 운반하지만 표시하지 않으면 유닛이 직선 / 대각선 / 직선 / 대각선으로 이동합니다.
Loren Pechtel

@LorenPechtel 당신이 틀렸다, 당신은 하나를 찾은 후 경로를 부드럽게 할 수 있습니다. 단위의 크기에 따라 두 개의 선을 만들고 tile0과 tileN 사이의 타일과 교차하는지 확인하는 것은 매우 쉽습니다. 여기서 tile1-tile (N-1)은 경로에서 제거하려는 타일입니다.
Markus von Broady

답변:


8

좋은 길 찾기 알고리즘의 경우 A *를 사용하는 것이 좋을 것입니다. 정교하고 효율적이거나 효과적인 경로 검색이 필요하지 않은 간단한 게임의 경우 캐릭터의 방향을 찾아서 대상을 향해 움직이면됩니다. 목표는 충분해야합니다.

정점에서 '가시성 그래프'(각 점에서 보이는 다른 점)를 생성 한 다음 그래프에서 A *를 수행하면됩니다. 가장 짧은 경로는 항상 가시성 그래프에 있기 때문에 작동합니다.

타일 ​​크기를 줄이면 도움이 될 수 있습니다.

자원

추가 자료

편집 : 나는 @MarkusvonBroady의 의견을 좋아한다.

"실제로는 경로를 찾는 것이 아니라 경로를 부드럽게하는 것입니다. 그림에서 찾은 경로는 괜찮아 보입니다."

자원

@MarkusvonBroady에서

나는 수색을했다, 다음을 찾으십시오 (이것들은 당신을 도울 수 있습니다)


1
훌륭한 링크, 나에게서 +1
lhk

2
@MarkusvonBroady, -1 주셔서 감사합니다. 나는 당신에게서 배웠습니다. 나는 요점을 원하지 않고 오히려 올바른 것을 배우고 공유 할 의향이있다. 나는 우리가 올바른 것을 찾을 수 있다고 논의함으로써 믿는다. :)
Md Mahbubur Rahman

@MarkusvonBroady, 경로 스무딩 알고리즘의 여러 리소스를 공유 하시겠습니까?
Md Mahbubur Rahman

실제로이 답변이 OP에 도움이된다고 생각합니다. 나는 OP가 실제 스무딩 (스플라인 보간 등)을 요구한다고 생각하지는 않지만 그의 알고리즘은 현재 끔찍한 비 최적 경로를 찾고 있으며 직선으로 "평활화"해야합니다. 추가 평활화없이 자연스럽게 그를 찾은 A *.
Sean Middleditch

나는 A *를 사용하고 있었고 최적의 길을 찾았다 고 생각합니다.
Kooi Nam Ng

0

원시 경로의 한쪽 끝에서 시작하여, 말을 path[0]제거 할 수 있습니다 path[1]세그먼트가의 포인트를 결합하여 형성된 경우 path[0]path[2]어떤 벽 교차하지 않습니다. 마지막 세그먼트까지 더 나아가면 더 간단한 경로가 제공됩니다.

이것은 경로를 매끄럽게 할뿐만 아니라 불의 예와 같이 직선의 3 연속 세그먼트와 같은 쓸모없는 점을 제거합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.