2014-04-03 2 views
0

C# XNA로 프로그래밍 된 내 작은 하향식, run-from-the-scary-ass-aliens 게임에서 나는 외계인과 벽이있다. 알아내는 데 어려움이있는 것은 외계인의 둥근 벽을 조종 할 수있는 방법입니다. 순간에 그들은 바보처럼 달려 들어서 미끄러 져 들어가고 상대방을 털어 내면 목표에이를 수 있습니다. problem http://imageshack.com/a/img829/6545/wsf4.jpgXNA - 벽 주위를 조종하다

내 질문은, 그래서 직접 : 외국인과 대상 사이에 벽이있는 경우

  1. 어떻게 확인합니까

    여기에 문제의 내 전문 그림이야?

  2. 어떻게 최단 경로를 따라 그들을 조종합니까?

알고리즘/설명 환영, C# 보너스! 벽이 항상 수직 또는

수평으로, 나는 :)

필요한 경우 추가 정보를 제공 할 hapy 해요 - 외계인과 벽이 AABB 이 - : :)

일부 같은 가정은 희망 계산을 쉽게하기

+0

"A * 길 찾기 연합"을 검색하십시오. Google에 입력했을 때 첫 번째 결과는 유망한 것으로 보였습니다. –

+0

@ChrisDunaway 내 게임은 그리드 기반이 아닌 연속적인 게임입니다. 이 해결책을 쓰지 않는다면 나는 세상에 알 고리즘을 위해서 그리드를 만들어야한다는 뜻인가요? 그렇다면 단순히 vector2의 좌표를 괜찮은 격자로 사용할 수 있습니까? 그리드가 얼마나 넓어야합니까? – IamPancakeMan

+0

돌아가고 싶은 곳에서 자신의 웨이 포인트를 정의 할 수 있습니다 (많은 대형 게임은 포인트 대신에 영역을 사용합니다).A * 알고리즘을 사용하면 포인트/영역을 연결하여 플레이어의 경로를 만들 수 있습니다. 원래의 직선 경로에서 벽과 실제로 충돌하는지 확인하여 A * 경로 찾기와 일반 이동 사이의 기능을 분리 할 수 ​​있습니다 (이 작업은 수행하지 않았지만 "raytracing"을 제안합니다). 따라서 플레이어 위치에서 목표 위치까지의 충돌을 감지하면 A *를 사용하여 가장 좋은 경로를 찾은 다음 다른 위치로 걸어 가면됩니다. –

답변

1

내가 개발 한 wp7/wp8 게임에 대한 연구를했을 때, 나는 A * 길 찾기와 함께 이런 종류의 문제를 해결했다. (www.policyalmanac.org/games/aStarTutorial.htm).

경로 찾기를위한 Dijkstra의 알고리즘을 사용할 수도 있습니다. http://i.stack.imgur.com/VMkdl.gif

이것이 제가 처음 접근 한 방법입니다. 나는 그 이후로 접근하는 다른 방법을 배웠다. 이것은 A * 길 찾기를 기반으로하며 AI 조종 세력/행동을 사용합니다. 조종사들만으로이 문제를 해결할 수도 있습니다.

조종사는 단순히 목표와 환경에 따라 이동하도록 강제합니다. 엔티티에 이동 (속도) 세력을 쌓으십시오. 이러한 세력의 합은 원하는 방식으로 엔티티를 이동시킵니다.

그래서 엔티티는 괴물을 향해 이동하고 벽을 피하며지도의 경계를 피하려는 움직임을 원할 수 있습니다. 이 속도에 % 값을 곱한 값 (모두 글로벌 힘에 적용하기를 원하는 값)이 함께 추가되면 최종 힘이 생깁니다.

이들 모두는 개별적으로 문제점과 제한 사항이 있습니다. 나는 A *와 조향력의 조합이 당신에게 가장 좋을 것이라고 생각합니다.

예 : http://i.stack.imgur.com/u7ECs.jpg '

편집 : 다 익스트라의 수동 노드를 배치 할 경우 기반으로 더 노드입니다. 노드를 배치하는 것이 옵션이 아니라면, 나는 조향 힘이 최선의 방법이라고 믿습니다.

+0

하하! 나는 의사 결정 수학에서 dij-cantpronounceit-ra의 algorythm을 기억합니다. 그것들은 쉬운 날들이었습니다 ... 그래서 나는 내가 사용하는 알고리즘에 상관없이 모든 곳의 노드를 필요로하는 것처럼 들립니다. 나는 dij-cantpronounceit-ra의 algorythm이 어떻게 보일지 상상할 수있다. 그래서 나는 그것으로 갈지도 모른다. 고맙습니다 :) – IamPancakeMan