Я делаю 2D-игру на основе плитки с MonoGame. Я пытался реализовать освещение для каждой плитки и в итоге использовал рекурсивную заливку, чтобы добиться эффекта от этого ответа https://gamedev.stackexchange.com/a/68803.
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
, установивLight=0
? Это поможет? - person MickyD   schedule 29.04.2015