2D 타일 기반 RTS에서 다리 아래를 통과하는 보트


10

2D 타일 기반 RTS를 작성하고 있습니다. 그리고 강 위의 다리 인 '의사 3D'기능을 추가하고 싶습니다.

아직 코딩을 시작하지 않았으며 충돌 감지 모델에 어떻게 적합한 지 생각하려고했습니다. 다리 아래를 지나가는 보트와 다리 위로 움직이는 유닛은 결국지도에서 같은 셀을 차지하게됩니다. 충돌을 방지하는 방법은 무엇입니까?

그러한 문제를 해결하기위한 일반적인 접근 방법이 있습니까? 아니면 이것을하기 위해 3D 세계를 구현해야합니까?


타일 ​​기반 시스템을 사용하는 경우 매번 "isOccupied"방법과 같은 것을 추가 할 수 있습니다. 다리 자체를 확인하십시오.
벤자민 위험 존슨

2
지상 단위가 물 단위와 상호 작용하지 않으면 두 단위 집합에 대해 별개의 충돌을 처리 할 수 ​​있습니다. 아마도 harboor의 보트는 플레이어 / npc와 같은 상호 작용을 허용하는 지상 유닛입니다.
GameAlchemist

답변:


7

가장 간단한 경우에는 "지상 / 교량"과 "물 / 교량"이라는 두 가지 값으로 만 구성 할 수 있지만 기본적으로 3 차원을 작성해야합니다.

Advanced Strategic Command 가 수행 하는 방식에서 영감을 얻을 수 있습니다 . 유닛은 특정 높이 레벨을 차지하며, 달리 할 수있는 특정 기능 (예 : 항공기 활주로)이없는 한 해당 유형에 맞는 높이 레벨에서만 움직일 수 있습니다. 일반적으로 변경 약간의 레벨 또는 다른 것에 대한 벌점과 함께 이동 포인트를 요합니다. 각 타일의 높이가 다른 한 타일은 원하는 개수만큼 사용할 수 있습니다.

ASC의 경우 레벨은 다음과 같습니다.

  • 우주
  • 높은 고도 (폭격)
  • 중간 고도 (인터셉터)
  • 지상 공격 고도
  • 지상 (대부분의 지상 유닛과 호버 크래프트, 심지어 물 위)
  • 부분 침수 (잠수함)
  • 잠수함 ( "숨겨진"잠수함)

9

레벨을 지정하는 각 타일에 간단한 속성을 추가 할 수 있습니다.

예를 들어 :

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

이제 레이어 값에 따라 타일을 정렬하고 아래쪽-> 위쪽으로 그릴 수 있습니다! 이렇게하면 게임에서 특정 깊이가있는 것처럼 보입니다. 대부분의 타일 엔진이이를 지원합니다. 추가 할 수있는 또 다른 멋진 점은 텍스처의 투명도이므로 맨 아래 레이어를 통해 볼 수 있습니다.

예를 들어 물로 수행 할 수 있습니다. lvl 1의 물과 lvl 0의 해저를 상상해보십시오. 물 질감이 다소 투명한 경우 위에서 바다의 바닥을 볼 수 있습니다.


@aleguna 걱정 마세요! 도와주는 것이 재미 있어요. :)
Zolomon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.