簡體   English   中英

每瓦照明XNA / MonoGame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM