[英]Per tile lighting XNA / MonoGame
我正在用MonoGame制作基於圖塊的2D游戲。 我一直在嘗試實現每塊瓷磚的照明效果,並最終使用了遞歸泛洪填充以從此答案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)。 我本質上需要的是一種逆轉此遞歸洪水填充的方法。
為了允許去除光源,我是否需要一起使用完全不同的算法,還是有某種方法?
實踐中的照明:
正如Micky Duncan所建議的那樣,我只是在每個屏幕磁貼上循環,將燈光設置為0,然后重新計算了光照貼圖。 我太着迷於嘗試撤消燈光,以至於我甚至都沒有考慮過將其整體重置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.