Я делаю 2D-игру на основе плит на MonoGame. Я пытаюсь реализовать освещение на плитки и в итоге использовал рекурсивную заливку для заполнения, чтобы добиться эффекта от этого ответа https://gamedev.stackexchange.com/a/68803.На плитку освещения XNA/MonoGame
private void UpdateLight(int X, int Y, int LightLevel)
{
//Check if position is out of bounds
if (X >= 0 && X < MapWidth && Y >= 0 && Y < MapHeight)
if (LightLevel > BlockMap[X, Y].Light)
{
BlockMap[X, Y].Light = LightLevel;
UpdateLight(X, Y - 1, LightLevel - 1);
UpdateLight(X, Y + 1, LightLevel - 1);
UpdateLight(X - 1, Y, LightLevel - 1);
UpdateLight(X + 1, Y, LightLevel - 1);
}
}
Это казалось отличным, пока я не захотел удалить источники света. Я просто не могу понять, как это сделать. Когда я хочу разместить источник света, я просто позвоню UpdateLight (LightSourceX, LightSourceY, LightSourceStrength). То, что мне по существу нужно, - это метод, позволяющий отменить эту рекурсивную заливку.
Чтобы устранить источники света, мне нужно было бы использовать совершенно другой алгоритм, или есть какой-то способ?
освещения на практике:
_ «пока я не захочу удалить источники света» _ - Не могли бы вы просто перевернуть настройку «BlockMap» «Свет = 0»? Это поможет? – MickyD