Как я могу обеспечить симметрию поля зрения в Roguelike?

10

Я работаю над Roguelike, и для него я создал алгоритм трассировки лучей (FoV), который состоит из построения линий Брезенхэма в каждой точке сплошного круга. Он не содержит артефактов (и достаточно эффективен), но в нем отсутствует важное мое требование: симметрия (если вы видите монстра, он также должен видеть вас).

введите описание изображения здесь

Вот пример несимметричного поведения моего кода. На левом изображении я стою в углу (красные блоки «X» = стена). Я могу видеть верхнюю правую плитку. Однако, если я перейду к одной из этих плиток (правое изображение), я больше не смогу увидеть плитку, с которой я пришел.

Я думаю, что я мог бы быть после формы Разрешающего поля зрения , но только потому, что в статье Рогебасина было предложено учесть симметрию. Есть ли альтернативные способы получить симметрию?

Г-н Смит
источник
1
Просто убедитесь, что точка зрения находится в том же положении, что и точка, в которую вы отбрасываете луч при проверке видимости.
MichaelHouse

Ответы:

8

Кажется, вы включаете квадрат, когда видите какую-либо точку в нем, когда глаз находится в одной фиксированной точке.

Тем не менее, вы должны включать квадрат только тогда, когда вы можете видеть его середину (при условии, что «глаз» также находится в середине). Или вы можете нарисовать лучи от каждого угла стартового квадрата до углов тестируемого квадрата, если вы можете увидеть любой из них, затем включите.

Ключевым моментом является то, что хитбокс квадрата также должен быть во всех местах, где должен быть глаз.

чокнутый урод
источник