답변:
악성 커뮤니티에서이 문제를 해결하기위한 많은 작업이 있습니다.
다음은 도움이 될 수있는 알고리즘 및 라이브러리를 나열한 페이지입니다. http://roguebasin.roguelikedevelopment.org/index.php?title=Field_of_Vision
이것은 완전한 대답은 아니지만 희망적으로 도움이 될 것입니다.
지도 / 타일이 정적 또는 동적으로 설정되어 있습니까? 정적 인 경우 오프라인 처리를 수행하고 가능한 한 사전 계산을 수행 하는 것이 좋습니다. 원하는 방식 (레이 캐스팅 또는 더 똑똑한 방식)으로 수행 할 수 있지만 레벨을 "굽기"하는 동안 모두 오프라인에서 발생하므로 매우 빠르게 만드는 것은 중요하지 않습니다. 각 지점에서 보이는 타일을 정확하게 미리 계산하거나 더 큰 영역과 각 영역에서 보이는 모든 타일을 만들 수 있습니다.
그런 다음 런타임시 보이는 타일에 대한 쿼리가 매우 간단하고 빠릅니다.
물론 동적으로 생성 된 레벨을 가지고 있다면 전혀 적용되지 않습니다 :-)
나는 당신이 어떤 플랫폼을 사용하고 있는지 잘 모르겠지만, 실제로 많은 주체가 없다면 당신의 라이트 캐스팅 엔티티 주위에 원을 성장시키기에 충분히 빠르지 않은 플랫폼을 생각할 수 없습니다. 서클 알고리즘에서 '플롯 팅'될 타일은 솔리드 타일이므로 빛을 차단합니다. 거기에서 당신은 막히거나 막히지 않는 원 세그먼트를 추적해야하기 때문에 약간 까다로울 것입니다. 그러나 그것은 내가 할 것입니다. 또 다른 옵션은 타일 해상도 공간에서 원으로 광선을 던지고 (매우 빠른) 각 타일이 단단한 타일에 닿을 때 멈추는 것입니다.