2015-04-28 3 views
1

Я делаю 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). То, что мне по существу нужно, - это метод, позволяющий отменить эту рекурсивную заливку.

Чтобы устранить источники света, мне нужно было бы использовать совершенно другой алгоритм, или есть какой-то способ?

освещения на практике:

enter image description here

+1

_ «пока я не захочу удалить источники света» _ - Не могли бы вы просто перевернуть настройку «BlockMap» «Свет = 0»? Это поможет? – MickyD

ответ

0

Как предположил Micky Дункан, я просто накинут каждый экранный плитку, установить свет на 0, а затем пересчитал Lightmap. Я был слишком зациклен на попытке отменить свет, что я даже не думал о его перезагрузке в целом.

+0

Не проблема, рад помочь :) – MickyD

Смежные вопросы