짧은 버전
차량 라벨을 겹치지 않는 방식으로 배포하여 참조 차량과 최대한 가깝게 배치하기위한 디자인 패턴이 있습니까? 그렇지 않다면, 내가 제안하는 방법 중 어떤 것이 가능한가? 어떻게 이것을 직접 구현 하시겠습니까?
확장 버전
내가 쓰는 게임에서 나는 공중 차량에 대한 조감도를 가지고있다. 또한 각 차량 옆에 차량에 대한 주요 데이터가 포함 된 작은 레이블이 있습니다. 이것은 실제 스크린 샷입니다.
이제 차량이 다른 고도에서 비행 할 수 있으므로 아이콘이 겹칠 수 있습니다. 그러나 나는 그들의 레이블이 겹치지 않게하고 싶습니다 (또는 차량 'A'의 레이블이 차량 'B'의 아이콘과 겹치지 않음).
현재 스프라이트 간의 충돌을 감지 할 수 있으며 겹친 스프라이트와 반대 방향으로 문제가되는 레이블을 밀어냅니다 . 이것은 대부분의 상황에서 작동하지만 영공이 붐비 면 대체 "스마트 한"대안이 있더라도 라벨 이 차량에서 아주 멀리 밀려날 수 있습니다 . 예를 들어 나는 얻는다 :
B - label
A -----------label
C - label
더 좋은 곳 (= 차량에 더 가까운 라벨) :
B - label
label - A
C - label
편집 : 또한 겹치는 차량 케이스 옆에 차량의 라벨 A
이 겹칠 수있는 다른 구성이있을 수 있음을 고려해야합니다 (ASCII 예술 예는 예를 들어 3 개의 매우 가까운 차량을 보여줍니다. B
과 C
).
현재 상황을 개선하는 방법에 대한 두 가지 아이디어가 있지만 구현에 시간을 투자하기 전에 커뮤니티에 조언을 구하는 것으로 생각했습니다 (결국 디자인 패턴이 존재할 수있는 "충분히 일반적인 문제"인 것 같습니다).
가치있는 것을 위해, 내가 생각한 두 가지 아이디어는 다음과 같습니다.
라벨 공간의 슬롯 화
이 시나리오에서는 모든 화면을 레이블의 "슬롯"으로 나눕니다. 그런 다음 각 차량에는 항상 가장 가까운 빈 차량에 라벨이 붙어 있습니다 (빈 = 해당 위치에 다른 스프라이트는 없음).
스파이럴 검색
화면상의 차량 위치에서 겹치지 않는 위치를 찾을 때까지 레이블을 증가 각도로 설정 한 다음 반경을 높이려고 시도합니다. 다음과 같은 내용이 있습니다.
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...