2009-04-21 4 views
1

좋은 2D 그리드 이동을 구현하는 방법을 모르겠습니다. 군인과 같은 유닛을위한 움직임을 구현하는 것은 쉽지만 우아한 방법으로 차량을 돌리는 방법을 모르겠습니다. 움직임은 C & C Red Alert와 같아야합니다 (3D가 아니기 때문에 3이 아니며 단지 2D 만 필요합니다).RTS 차량 격자 동작

편집 : 쉽게 찾을 수 있기 때문에 길 찾기 알고리즘에 대한 코드도 필요하지 않습니다. 그러나 그리드 움직임은 그렇지 않습니다. 저는 정확히 "대각선"움직임을 사용하는 타일에서 다른 타일로 "정확히"이동하는 것을 알지 못합니다 (직각 이동보다 "더 긴"이동 임에도 불구하고).

답변

1

한 방향으로 회전 당 격자 단위로 차량의 회전 반경을 표현하고, 점진적으로 각 에릭 Lippert의에 의해

1

4-part series 차례에 다음 인접한 격자 단위로 이동하는 Bresenham 원 알고리즘을 사용하는 것입니다 도움이 될 것입니다

나는 C#을 지정하지 않았지만 그가 제시하는 일반적인 알고리즘은 소리입니다.

+0

글쎄, 실제로 C#에서이 작업을 수행하지만 요점은 길 찾기 알고리즘이 아닙니다 (웹에서 어느 곳 으로든 접근 할 수 있음). 그것은 운동 자체에 관한 것입니다. – mnn

2

참고,이 작업을 수행 중이지만 잘 작동합니다.

출발지와 목적지 좌표가 주어지면 두 지점 사이에 단순히 "선을 그리고"그 선을 따라 차량을 이동하십시오.

차량이 더 세분화 된 그래픽 화면으로 이동할 때, (예를 들어 간단한 좌표 매핑을 통해) 유닛이 "실제로"어떤 ​​사각형인지 확인할 수 있습니다.

단위가 하나의 정사각형에 있어야하는 경우 단위가 "정지"되면 다음 정사각형으로 이어져 완전히 포함될 수 있습니다 (예 : 이미 정사각형으로 남았 으면 B로 계속 이동 함). 심지어 차량이 "멈추었다").

두 점 사이의 헤딩을 계산하여 차량의 방향을 결정하십시오.

차량에 8 방향 만있는 경우 최종 목적지가 아닌 다음 증분 사각 목적지를 가리킬 수 있습니다. 그것은 천천히 움직이는 차량은 괜찮아 보이지만 빠른 차량은 우스운 이야기가 될 것입니다.

제곱 계산에 도움이되는 line drawing algorithm을 참조하십시오. 물론, 이것의 어느 것도 경로 찾기와 관련이 없습니다.

+0

음, 고마워, 마침내 더 좋은 대답. 나는 이것을 들여다 볼 것이다. 그러나, 나는 현대의 3D RTS 게임 에서처럼 자유로운 움직임보다 단순한 것을 포기합니다. – mnn

+0

질문 : 8 방향 또는 16 방향 중 선택할 수있을 때 도움이 될까요? 충돌을 감지하기가 더 쉽기 때문에 (자유형 운동 대신에)이 접근법을 원합니다. – mnn

+0

8 대 16 방향은 중요하지 않습니다. 단위를 표시 할 때 직면을위한 해상도 문제 일뿐 아니라 여전히 "그래픽"스프라이트 좌표와 기본 그리드 좌표 사이를 매핑해야합니다. 충돌은 그리드 레벨에 있어야한다고 생각합니다. –